Двач.hk не отвечает.
Вы видите копию треда, сохраненную 3 октября 2020 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
2 1693083
Двач, подскажите, есть ли такой контейнер что-бы можно было задать ему фиксированный размер и вставлять в него элементы с одной стороны, а с другой что-бы они смещаясь по очереди вылетали?
3 1693096
>>693083
Врядли точно такое есть. Только свой навернуть. Можно на основе вектора. Сохраняешь индекс последнего добавленого элемента (он же начало). При добавлении - инкрементируешь индекс и заменяешь текущий элемент вектора на новый. Если дошел до конца - начинаешь снова с нуля. Ну и нужно operator[] продумать - вычислять индекс исходя из текущего смещения, учитывая границы массива. Вообще очень похоже на кольцевой буфер - но для буфера заполнение это гроб, кладбище, пидор и надо разгребать. А у тебя нрмальный режим работы.
5 1693105
>>693083
Двусвязный список?
6 1693108
>>693105
Он растёт до бесконечности.
7 1693110
Привет, анон. Возможно ли реализовать односвязный список без проверки при создании каждого нового узла списка, не первый ли он? Мой внутренний байтоёб не даёт мне покоя, пожалуйста, помогите.
8 1693114
>>693108
Кольцевой
9 1693122
Есть ли смысл пихать по всех функциях noexcept, если я не юзаю исключения? (именно в этом мини-проекте)

То бишь, void foo() noexcept {...}
image.png168 Кб, 1280x720
10 1693126
Как std::set будет сортировать типы, которые не сортируются? Ну там классы какие-нибудь? Или надо обязательно перегружать что-нибудь?
11 1693133
>>693126
Если тип не поддерживает оператор <, то код не скомпилируется (ну или если ты явно не передашь функтор-сравниватель).
12 1693134
>>693126
Реализовать std::less или написать кастомный operator<
13 1693139
>>693110
Так, ладно, я уже сам разобрался. Всем спасибо.
14 1693145
>>693122
да, будет чуть чуть побольше перфа и четкое напоминание самому себе, что тут эксепшен не бросается
15 1693151
>>693133
>>693134

Спасып
16 1693170
Двач, делаю свой класс наследуясь от array, но при создании объекта нового класса в конструкторе не работает initializer_list.
https://pastebin.com/QB5TRuHz
Подскажите плиз, тема нихуя не простая, примеров нет, а что делать не ясно.
17 1693178
>>693170

> делаю свой класс наследуясь от array


Не стоит наследоваться от классов из std
18 1693179
>>693170
ваще не надо наследоваться от std контейнеров, они об этом намекают невиртуальным деструктором.

А к твоему вопросу - сделай конструкторы. Для твоего нового класса определен только дефолтный конструктор
19 1693180
>>693178
И почему-же?
20 1693182
>>693179

>сделай конструкторы. Для твоего нового класса определен только дефолтный конструктор


using std::array<T, N>::array;
Разве это не наследует все конструкторы?
21 1693183
>>693180
Не у всех у них есть виртуальный деструктор
22 1693185
>>693182
Вот даже цитата из вики
If the using-declaration refers to a constructor of a direct base of the class being defined (e.g. using Base::Base;), all constructors of that base (ignoring member access) are made visible to overload resolution when initializing the derived class.
23 1693191
Добавил наследование для своего класса от QObject, чтобы сигналы работали:
class Layer : public QObject
После этого в инициализациях этого класса стали появляться ошибки о неявно-удаленном копи-конструкторе. Как это понимать? Я ничего не удалял.
Например:
Layer currentLayer = layers[index];
Пишет:
ошибка: call to implicitly-deleted copy constructor of 'Layer'
image.png48 Кб, 882x325
24 1693200
Объясните пожалуйста начинающему долбоёбу, зачем автор урока использует суффиксы если он уже объявил тип? Нахуя нужна эта сраная "f" в конце если уже указано, что там float? Типа если суффикс не указать, будет какой-то не такой float? А если такой, то вопрос тот же - нахуя эти суффиксы в таком вот виде?
25 1693205
>>693182
Например 1.0 - это double, а не float. И в момент создания переменной будет implicit конвертация из double во float.

Суффиксы корректно задают тип у rvalue.
26 1693209
27 1693210
>>693200
По умолчанию X.X вроде double даёт, поэтому будет неявная конвертация. В данном случае суффиксы нахуй не надо, но уж не знаю где, но где-то потом может всплыть проблема.
28 1693212
>>693205
>>693210
То есть грубо говоря компилятор такой "а похуй что там этот хуй указал, ну написал float, да мне насрать, буду считать что это double"? И суффиксом мы ему уточняем, что это точно float. Типа без суффикса ему мало?
29 1693214
>>693212
он будет неявно преобразовывать значение слева к типу слева.

попробуй сделать что-то в духе int a = 55555555555555555ull;
30 1693216
>>693212
auto a = 1.0; // double
auto b = 1.0f // float
Это поведение кстати можно в компиляторе поменять.
31 1693223
>>693216
Так лол, там в примере на скринах уже указан тип. Это же не как в го, где := написал и оно само определило что там за тип. Здесь конкретно написано, что переменная fValue это float. Не double, не ещё что-то, а именно что float. То есть мы это указали. Если бы мы захотели, чтобы переменная была double мы бы написали double. Но мы написали float. У меня именно это вопросы вызывает.
32 1693225
>>693214
По моему это буквально означает то, что я написал постом на который ты ответил. Ну ок, буду знать, спасибо.
33 1693229
>>693223
Тебе уже 5 раз написали
float x = 1.0; // компилятор компилирует неявную конвертацию во float т.к. значение 1.0 является double а тип данных куда это значение будет присваиваться является float
float x = 1.0f // компилятор нихуя не делает т.к. значение 1.0f уже является float
Хотя с оптимизацией компилятор вроде как в любом случае делать нихуя не будет
34 1693231
>>693229
Хорошо, я даже не буду спрашивать нахуя это надо и почему бы просто не сделать так, что если ты указал float - это будет float без всяких неявных конвертаций. И double будет только если ты укажешь, что это double. Раз сделано значит умные дяди решили, что надо. Спасибо.
35 1693237
То что справа это временный объект и временный объект будет таким каким ты его там описал, с таким-же типом данных и таким-же значением, а технически без конвертации разные типы данных нельзя друг в друга записывать.
Поэтому значение double обязано и будет конвертироваться во float.
Временное значение - https://en.cppreference.com/w/cpp/language/lifetime
36 1693238
37 1693240
>>693231

> почему бы просто не сделать так, что если ты указал float - это будет float без всяких неявных конвертаций


Последнее что я добавлю для полной ясности
float a = 1.0;
В данном случае ты указал float для своей переменной, она и будет float, но правое значение это double, а как я уже сказал разные типы данных не могут быть записаны друг в друга, поэтому конвертации не может не быть.
38 1693280
>>693191
Я тоже пытаюсь разобраться в куте, пока безуспешно.
Подозреваю, что тебе нужно конструктор копирования для твоего класса Layer сделать.
39 1693290
>>693280
А, в гугле написано, что нельзя by design.
https://doc.qt.io/qt-5/qobject.html#no-copy-constructor-or-assignment-operator
40 1693376
Сколько бит за раз суммирует процессор?
41 1693379
>>693376
Что ты имеешь в виду?
42 1693382
>>693379
Ну где то слышал что для длинных примитивных типов сложение выполняется за 2 такта в отличии от коротких
43 1693424
>>693376
32-битный — 32, 64-битный — 64.
Со всякими SSE и MMX может и больше.
44 1693474
>>693424
С AVX2 может 256 бит за инструкцию. Все ждем следующую версию, когда векторы увеличат до 512 бит.
45 1693501
>>693081 (OP)
Сап, анон. Есть параметрический класс, я на вход проги получаю тип , через свитч-кейс перебираю способы вызова параметрической функции, параметр которой собственно передается в параметр класса. Есть ли какой-то более элегантный способ, кроме как свитч-кейс?
46 1693521
Подключение всех библиотек разом замедляет компиляцию?
47 1693522
>>693474

>Все ждем следующую версию, когда векторы увеличат до 512 бит.



https://market.yandex.ru/product--protsessor-intel-core-i9-skylake-x/259937156
48 1693564
>>693474
Это не следующая версия, они давно увеличены на серверных сокетах
49 1693571
>>693521
Поддвачну вопрос
50 1693573
>>693521
Сложно потестить?
51 1693586
>>693564

И уже в десктопах на skylake-x
52 1693593
Поясните за разницу между set и unordered_set
53 1693599
>>693593
Не разницу в том как они устроены и внутри, это я понял. А в том какую когда дучше использвать. Они почти одинаковые. Единственное перебирать упорядоченное множество иногда удобнее
54 1693603
>>693599
set - когда не очень много элементов и операции сравнения будут быстрее чем взятие хэша от элемента. unordered_set - когда дохуя элементов. Я по крайней мере стараюсь так юзать.
55 1693604
>>693593
В гугле забанили?
Set - это всегда отсортированный массив (под капотом там red-black tree) с неповторяющимися значениями. Если это сэт структур/объектов, то ты решаешь по какому полю структуры будут неповторяющиеся значения.
Unordered_set - тоже самое, только эта структура данных позволяет хранить повторяющиеся элементы, в отличие от сэта.
А вообще, если ты не смог ТАКОЕ нагуглить, то земля пухом, анонче.
56 1693606
>>693604

>позволяет хранить повторяющиеся элементы


Ты с мультисетом перепутал
57 1693665
>>693593
для laba1 разницы нет
58 1693730
>>693593
Первый на дереве, второй на хэш таблицах. В первом сохраняется порядок, во втором дешевле операции доступа, вставки, удаления.
59 1693745
60 1693759
Ананасы, как заставить программу больше потреблять ресурсов процессора?
61 1693765
>>693759

>как заставить программу больше потреблять ресурсов



https://github.com/2000nickels/linpackc
62 1693766
>>693759
white (true) {};
изображение.png108 Кб, 604x347
63 1693772
>>693766

Да ты охуел.
image.png44 Кб, 741x708
64 1693854

>Напишите программу, которая просит пользователя ввести число от 0 до 255. Выведите его как 8-битное двоичное число (в парах по 4 цифры). Не используйте побитовые операторы.



Вот это хтоническое нагромождение говна реально самый простой и правильный вариант решить эту задачу? Разве через кучу if else не проще? Мне просто в голове пока ещё трудно держать такой громоздкий алгоритм как тут. Стоит биться башкой в эту задачу пока на 100% её не пойму?
65 1693882
>>693854
std::string str;
If (i < 256)
while (i > 0){
str+=i%2;
i/=2;}
std::reverse(str.begin(),str.end());
std::cout << str;
66 1693883
>>693759
https://github.com/xoreaxeaxeax/movfuscator

> The mov-only DOOM renders approximately one frame every 7 hours, so playing this version requires somewhat increased patience.

67 1693901
>>693882
Что такое reverse я ещё не знаю, но сама часть с вычислениями выглядит проще
Правда я не люблю использовать оператор +=, а предпочитаю писать это в полном виде
70 1693932
Есть какие-нибудь сайты или сборники упражнений по плюсам с градацией по сложности (начиная от самых лёгких уровня хелло ворлд)? А то я чувствую, что практики мне нужно раз в десять больше чем предлагают эти уроки или в голове у меня нихуя не отложится
71 1693934
>>693932
Codewars, leetcode
72 1693935
>>693912
Ты читал сам ссылку свою? Двоичного нет модификатора.
73 1693942
>>693854
#include <bitset>
if(i<256 && i>=0){
std::bitset<8> x(i)
std::cout << x;}
74 1693949
Анон, а как тру пацаны хранят id какой-нибудь сильносоздаваемого говна, пусть будет например идентификатор события убийства игрока в сетевой игре? Int мне кажется маловат. Какой-нибудь guid + хеши для map?
75 1693951
>>693934
Codewars выглядит именно как то, что нужно. Раздражает правда, что там надо каждый раз нажимать kata, выбирать сложность, выбирать упражнение, и нет возможности просто решать их подряд одно за другим
76 1693953
>>693934
>>693951
Точнее есть, но там сложности как-то намешаны в кучу
77 1693971
>>693522
>>693564
Уже доступно в C++?
78 1693975
>>693971
это интрисики, С++ тут непричем
79 1694013
>>693935
Во я рагуль...
80 1694029
>>693949
GUID неплохим вариантом выглядит. Там 128 бит, на долго хватит. В Boost есть heade-only реализация (UUID обзывается), хешер в комплекте.
81 1694035
>>693949
Int'ом обычно и хранят. В UE4 например для строк юзаются идентификаторы строк FName который и является интом.
82 1694176
>>693290
А как тогда сделать, чтобы для моего кастомного класса работали сигналы и слоты? Он же должен быть наследником QObject.
83 1694177
>>693191
Давай скрин кода
84 1694181
>>694176
Создавай в куче
85 1694188
>>694177
У меня 11 хедеров и столько же cpp-файлов. Бесполезно требовать код.
86 1694190
>>694181
Что значит "создавать в куче"? Как я класс создам в куче?
87 1694193
>>694190
Classname* vsr = new classname
88 1694197
>>694193
Я итак так инициализирую все кастомные объекты. Причем здесь сигналы и слоты?
89 1694209
>>694197
Какой же ты тупой блядь...

> std::vector<std::unique_ptr<Layer>> layers;


> Layer ★currentLayer = layers[index].get();

90 1694213
>>694209
И че тут? Ты создал вектор с моим классом? И че? Как это связано с сигналами и слотами?
91 1694277
>>694213
Тут спроси >>1680326 (OP)
92 1694329
Сап, анон. Прочитал про REST, захотел к своей хайлоад-проге прикрутить няшную мордочку, чтобы веб-сервер делал к ней запросы (формат типа шттп, ответы - жсон, сильно ограничить большое количество запросов), потом хуячил вебомагию, а уже к серваку коннектились пользователи.
И я не знаю приемов и апи, как это всё правильно делать. Изи изучить язык и поведение, и как-то не изи собрать этот вебопаззл.
Например, сервер апач, в нем что там, питон-скрипты? А вся красота на js на страничке? А есть что-то красивое из коробки?

Второй вариант - подключить Qt + qml, оно проще, но платно и не веб
93 1694445
Анчоусы, когда определяют класс, чисто стилистически следует ли писать отдельно поле private? А то у меня привычка делать, например, такое :
class RandomClass {
// private members
public:
// public members
};

Зная, что неявно поля класса имеют модификатор доступа private... Нужно ли явно указывать энивей или так норм?
94 1694448
>>694445
вкусовщина, но мне персонально больше нравится классика. сначала паблик, а потом прайвет, т.к. интерфейс должен быть выше, чем детали реализации имх
95 1694531
>>693975
Найс, спасибо.
96 1695014
Выводится что надо qDebug() << string;
Выводится только один раз (вывожу в цикле) и только часть строки std::wcout << string;
Почему так? Строка является std::wstring
97 1695340
>>694445

>чисто стилистически следует ли писать отдельно поле private?


Обычно внизу пишут, но я для своих проектов сверху леплю. Когда сам класс пишешь, удобнее сразу потроха видеть. Когда чужой класс используешь - внутренности не особо важны.
98 1695349
>>693971
Они оче давно появились, году в 2013 что ли. Но у нас компилятор интеловский. В вижуал студиях новых точно тоже доступно.
99 1695411
>>693971

>Уже доступно в C++?


В gcc и clang. В msvc - только через интринсики.
https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
https://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors
100 1696226
>>695411
Для таких извращений лучше подойдет Intel комппилятор.
101 1696399
>>696226

>Для таких извращений лучше подойдет Intel комппилятор.


Почему "извращений"? Очень удобно и кроссплатформенно, в отличие от интринсиков.
102 1696434
>>696226
А потом волшебным образом на не на интеловских процессорах программа будет работать не совсем так, как задумывалось.
https://3dnews.ru/997915
103 1696499
Я правильно понимаю, что нужно для каждой закладки(tab) в Qt надо создавать отдельный класс виджета и наследоваться от виджета главного окна?
104 1696558
Бамп >>1696526 →
105 1696594
>>696558
открой дебаггер и посмотри
106 1696602
>>696594
Нарушение прав доступа при записи.
107 1696605
>>696602
при чтении*
108 1696611
>>696605
Выходишь за границы может?
109 1696615
>>696602
Что по твоему возвращает sizeof(Student)?
110 1696618
>>696611
Ну, у меня файл используется только в этой функции, нет никаких лишних данных. Проверки на пустоту сделал, динамическую память нигде не использую.
111 1696619
Почему единственный способ узнать точный тип объекта это вызывать ошибку во время компиляции?
112 1696620
>>696615
Размер упакованной структуры в байтах?
113 1696624
>>696620
Сгенерированый файл проверял? В нем все правильно?
114 1696626
Бля, я дебил, у меня там string используется.
115 1696685
Парни, помогите. Нужно сделать программу, которая делает зеркальное отражение бинарного дерева(данные из файла) и записывает его в другой файл. Вводные данные в виде(первая цифра-родитель; последующие- дети):
5 8
3 6 7
8 9 10 11
1 2 3 4 5
Порядок случайный. Можно использовать только fstream библиотеку.
116 1696781
>>696499
Нет, не правда
117 1696785
>>696781
В чем ошибка? Не надо наследоваться, только указать this в качестве parent?
118 1696796
>>696785
Что корректно ты не разобрал в этом примере?
https://doc.qt.io/qt-5/qdockwidget.html#details
119 1696807
>>696685
Делаешь структуру узла бинарного дерева(инфо, указатель налево, указатель направо), делаешь функцию добавления и вывода. Добавляешь по принципу большее слева, меньшее справа(при условии, что в фале всегда большее справа) и все.
120 1696810
>>696796
Да я вот про эту штуку спрашивал.
https://doc.qt.io/qt-5/qtabwidget.html
Тут еще есть вот такой класс, наверное его проще использовать.
https://doc.qt.io/qt-5/qtabbar.html
121 1696817
У статического метода класса ключевое слово static указывается и в хедере, и в cpp?
122 1696956
>>696399
Я об этом и говорю. У них есть поддержка встроенной сборки.
123 1696965
>>696817
Все, нашел. Только у прототипа.
124 1697090
Привет, аноны. Хочу перекатиться из Жавы в плюсы. Какие у меня есть варианты?
125 1697093

>>16968


Ну а разве там не нужно, чтобы родитель указывал на массив из детей(односвзный список)?
126 1697136
>>697090
Варианты чего?
127 1697149
Сап анон, вопрос по выбору контейнера. Предположим, есть тип Player c id, name, bag, всей хуйней, как обычно такой формат хранят? Предполагается, что игроки часто удаляются, добавляются, а id - глобальный счётчик, считает подряд.
unordored_map мне кажется нормально подходящим под задачу, но есть же ещё unordored_set? (Ключ для map берется тот же, что и player.id)

А если задача взятия i элемента по ключу не популярна, в основном все операции идут со всем контейнером, то может вообще использовать std::list, а при необходимости поиска просто пробегаться через find?
128 1697174
>>697090
Не стоит, анонче.
129 1697200
>>696619
Мышкой наведи на него в ide, тип в подсказке будет.
130 1697287
>>697149
umap наилучший вариант, странно, что в тебя такие вопросы возникают
131 1697347
>>697149
Игроков много всегда в один момент? Порядок игроков внутри контейнера важен? Структура не очень тяжёлая? Если на все вопросы ответ "нет", то думаю, что итерирование по обычному вектору быстрее будет. Удаление будет просто своп удаляемого элемента с последним. Хотя unordered_map тоже хороший вариант, да и чуть проще в исполнении.
132 1697372
>>697136
Варианты переката. Куда? Что нынче пишут на плюсах? Бывают ли проекты где используют Жабу и плюсы, чтобы перекат прошел безболезненно?
133 1697422
>>697347
Ну там не игроки, там другое, но да, много пиздец, по 10-100к, обновляется раз в секунду. Вектор не зашёл вообще из-за жирной реаллокации. Да и не нужны выровненные в памяти данные для таких объектов.
>>697287
unordored_map?
134 1697441
>>697174
А куда, в раст? хочу в системные
135 1697454
>>696434
>>696399
>>696226

поясните за симд интринсики. Как я понимаю они же на любом х86 будут работать, или на амуде что-то пойдет не так?
136 1697527
>>697441
Да, в раст. Пока освоишь плюсы хотя бы на уровне джуна - раст уже выстрелить успеет.
137 1697542
Вот с этого я охуел.
class Widget : public std::enabled_shared_from_this<Widget>{}
Как же криво реализован shared_ptr
138 1697564
>>697542

>Как же криво реализован shared_ptr


Попробуй сам сделать, придешь к такому же решению. Если ты не понимаешь зачем так сделано (причем людьми которые гораздо опытнее тебя) - это не "криво", это просто ты недалек.
139 1697570
>>697542
Лично мне очень редко нужен shared_from_this. Намного реже, чем сам shared_ptr, которым я и так почти не пользуюсь. Хотя емнип в асио это сильно используется.
140 1697581
>>697454
Через cpuid набор инструкций нужно проверить, конечно же.
141 1697652
Двач, как зарегулярить два числа в строке? К примеру вот "Строка: 150/550"
142 1697664
>>697652

([0-9]+).*([0-9]+)
143 1697665
>>697664
Ну так регулярится только первое число, ко второму не переходит с std::regex_search
144 1697666
>>697664
>>697665
Хотя нет, так как ты написал всё зарегуляриться, но мне надо только числа.
146 1698205
Господа, поясните за паттерн Prototype. Почему прототип нужно копировать? Что мешает мне создать точно такой же объект с помощью new? Копирование быстрее, чем инициализация?
Просто вот есть у меня куча объектов-прототипов, и у каждого по несколько полей-указателей. Я не понимаю, зачем мне заново прописывать инициализации для каждого из полей в методе Clone(), когда я могу просто создать новый объект, и все точно будет работать.
147 1698289
Хочу в катиться в thread, но мне для моей задачи надо знать, могут ли несколько потоков обращаться к одной области памяти одновременно. Если да, будут возникать баги или конфликты?
148 1698293
>>698289
Один массив объектов класса должен параллельно обрабатываться.
149 1698301
>>698205
ДАВАЙ ХУЯРЬ ПО ПАТТЕРНАМ, РАБ
150 1698310
>>698301
думать от тут блять начал.
ХУЯРЬ НЕ РАЗГИБАЯСЬ
за тебя другие чувачки подумают
151 1698312
>>698289
В общем случае, да. Есть исключения (например, если все потоки будут только читать, то это безопасно)
152 1698549
>>698289
Почитай про понятие "состояние гонки" или на человеческом языке - race condition. Пусть кол-во тредов - N, если N > 1, то если хотя бы один из тредов пишет в общую между тредами область памяти - состояние гонки имеет место быть. Решается это несколькими способами - атомарными переменными, мьютексами (в твоем случае, скорее всего, подойдет больше мьютекс).
153 1698607
>>698205
Как проще, так и делай.
Clone() - это для тех случаев, когда через new будет либо сложно, либо не то. Например, объект был создан и настроен в коде, который ты не можешь или не хочешь менять, но при этом можешь делать его копии.

пзц, поубивал бы этих придумывальщиков "паттернов проектирования", более бесполезного учения в жизни не встречал
154 1698609
>>698607

>можешь делать его копии


"его" — в смысле объекта, а не кода.
155 1699259
Кто-нибудь перекатывался из C++ на Java?
1. Сколько учили язык? В свободное время / во время работы?
2. С какой и на какую позицию перекатились? Сильно ли просели по зарплате?
3. Интересные ли задачи по сравнению с плюсами? Много ли своих заморочек?
4. Оно того стоит?

Работаю НЕ в НИИ, пишу на современном C++17 с пакетным менеджером, CI и всеми возможными плюшками, но чё-то пердолинга всё равно многовато. Что происходит с людьми пердолящими Qt и C++98 на заводе вообще не представляю.
156 1699294
>>699259

>С какой и на какую позицию перекатились? Сильно ли просели по зарплате?


Лол. В среднем зп джависта на процентов 20% выше чем у крестовика, поэтому при перекате в джаву по зарплате вряд ли кто-то проседал, скорее наоборот.

>Интересные ли задачи по сравнению с плюсами?


>Оно того стоит?


На вкус и цвет, как говорится. Если ты находишь тырпрайз интересной отраслью разработки - джава для тебя. Кресты для игроделов и байтослесарей (разработкой браузеров занимается 1% из всех девов, поэтому я не беру их в расчет, например), то бишь отрасль совершенно другая, требующая совершенно других знаний. Прислушайся к своим интересам, чтоль.
157 1699303
>>699294

> разработкой браузеров занимается 1% из всех девов


Ты так говоришь, будто это что-то почётное.
158 1699325
>>699259
капец а я наоборот хочу
159 1699334
>>699294

>тырпрайз интересной отраслью разработки


Кто-нибудь может пояснить кстати, что такое этот ваш тырпрайз/энтейрпрайз? Какие проекты считаются энтерпрайз? Писать вот те же браузеры это энтерпрайз или нет? Если нет, то чем написание энтерпрайз проекта отличается от написания браузера?
160 1699474
>>698205

>Почему прототип нужно копировать? Что мешает мне создать точно такой же объект с помощью new?


Чтобы избежать дублирование кода. Don’t repeat yourself
161 1699530
>>697666
Тебе надо match и перебор групп в матче
162 1699580
>>699334
посмотри переводик слова enterprise и всё станет понятненько
163 1699581
>>699334
Тырпрайз это когда пишешь сортировку массива с printf. Потому что консоль это линукс, а линукс стоит на серверах, а серверы стоят в энтерпрайз корпорациях.
164 1699640
>>699259
Расскажи поподробнее про твое текущее место работы позязя

Что за предметная область, в чем заключается пердолинг, средний уровень крестовиков, почему именно С++17 и какие конкретно фичи из него, смотрите ли на 20 стандарт, че нить поконкретнее про стек неплохо было бы услышать

Добра
165 1699800
Зачем нужен & в перегрузке операторов?
166 1700348
Котаны, как реализовать события в С++? Допустим, у меня есть очередь и есть тред, который по сигналу должен добавлять элемент в очередь (сигнал приходит от другого треда).
167 1700360
>>700348
upd

Забыл добавить, что хочется исключить polling, а сделать так, чтобы тред сделал свое дело, заснул и по сигналу с другого треда вставил новый элемент в очередь.
168 1700376
>>700360
Один из вариантов это от std::condition_variable плясать. Если взять как пример кода в https://en.cppreference.com/w/cpp/thread/condition_variable
Код из функции worker_thread() добавить как метод класса очереди listen() и сделать там бесконечный цикл. Тред который хочет добавлять елементы в очередь вызывает queue.listen(callback) - и становится на паузу пока не будет изменена std::condition_variable. Тред который подает сигналы вызывает функцию notify() (в примере это main) которая меняет std::condition_variable, спящие пробуждаются, вызывается колбек и все уходит на новый цикл. Соотвественно нужно придумать способ прерывать этот цикл - очевидный это сделать так чтобы колбек возвращал булеан - нужно продолжать или нет. Но это как-то попахивает, незнаю почему. Колбек нужен чтобы скрыть эту все хуйню от клиенских тредов - они просто вызывают listen()
и потом у них дергается колбек по сигналу - они не ебутся со всей этой кондишионал парашей. Естественно вмест околбека может быть какой-то делегат, функтор любой коллабле который тебе удобен.
169 1700408
Ебаная поделка старика Билли не хочет компилировать этот код.
https://onlinegdb.com/BkHWgmOsI
Это баг msvc?
170 1700747
>>700408

>auto f = [](){};


Современный С++ одной строчкой..
15019507027740.png40 Кб, 1620x774
171 1700856
>>700747
Да дело не в этом. Мало того что мув конструктор не работает у packaged_task, так lifetime у callable ровно до того момента пока существует хоть один shared_future, даже если он уже давно готов. Со всеми захваченными в лямбду переменными, которые он, сука, должен был освободить.
Screenshot.png91 Кб, 1203x589
172 1701022
Пикрилейтед.
Что за хуйня, анон? Есть отсортированный вектор структур по определенному полю (здесь выбран int), вызывая бинарный поиск и через лямбду кастомизирую компаратор (без этого компиль не знает по какому критерию искать значение в векторе), он высирает аж 3 действия. Напоминаю, что временная сложность бинарного поиска - O(log(n)), сам логарифм по базе 2, в векторе 4 объекта.
В таком случае, log(4) = ~0.6, то бишь, округляя, максимум за 1 итерацию поиска должно было найти значение, а тут аж 3 операции! Щито? Мб я чет наговнокодил и надо по-другому? Мб не через лямбду?
Заранее спасибо.
173 1701033
>>701022
Ты нахуя десятичный логафирм берешь, дурик.
174 1701149
>>701022

>Напоминаю, что временная сложность бинарного поиска - O(log(n)), сам логарифм по базе 2, в векторе 4 объекта.


Чёт пиздец.

>В таком случае, log(4) = ~0.6,


)))
eb532889379e9b8610a78ee7adf32041fd561c9ehq.jpg50 Кб, 668x1024
175 1701227
Сап, анон. Есть два стула - возврат ответа через return функции, или возврат ответа в передаваемую ссылку:

A foo1(const B& b)
{
return b++;
}

void foo2(const B& b, A& a)
{
a = b++;
}

ирл встречал оба варианта. Особого удобства тоже нет, если параметров несолько, то можно запаковать в кортеж.
Но я нуб в асинхронном и параллельном программировании, какой вариант лучше подходит?
176 1701277
>>701227
В паралельном наверное лучше через возврат делать - это более чистый вариант (pure function) что плюс при многопоточности, хотя мне сложно привести какой-то конкретный пример, как минимум в плюсах. Передача через ссылку - если это сделано имменно для возврата значения (тоесть это не ссылка на какой-то расшареный на несколько функций ресурс) то единственная причина это делать - попытка экономить. Но с RVO это бессмысленно, и даже вредно учитывая что аргументы у функций не бесплатны. Тоесть в случае одного аргумента это 100% возврат значения. При двух и больше уже стоит смотреть что красивей выглядит. Скорее всего паковать результат будет удобней.
177 1701309
>>701227
По ссылке обычно передаём то, что нужно именно изменить, т.е. например добавить в список или нарастить bounding rectangle. По значению всё остальное
178 1701342
>>701022
>>701033
>>701149
Писал ночью и не соображал что пишут. По базе 2 получается log(4) = 2, но действий-то все равно 3. А должно быть максимум 2, нет?
179 1701354
>>701342
O(n) это показатель того, как будет расти время, а не времени
qtsplashdifference.gif3,2 Мб, 360x640
180 1701377
Делаю splash screen в приложухе для андроида в qt. Делаю по этой инструкции http://zmc.space/posts/qt-android-splash-screen
Сплеш скрин немного сдвигается вверх во время загрузки, то есть в момент когда тема у которой бэкграунд задан как сплэш сменяется на сплэш из манифеста. Сам глюк на пикриле. В статье предлагается просто убрать лого для сплэша и оставть только у бэкграунда темы. Но меня это не устраивает, так как между сплешем и появлением интерфейса приложения будет появляться пустой экран. Мне нужно чтобы сплэш скрин был как на обычных приложениях, без сдвигов и без пустых экранов. Как фиксить?
181 1701389
Где искать интересные opensource проекты? На гитхабе каша какая то
182 1701395
>>701354
Нет, анон. Big O notation - это обозначение пространственной или, в этом случае, временной сложности алгоритма. Если возьмем частный случай, в нашем случае - бинарный поиск БЕЗ повторяющихся элементов, то его worst case, равно как и best case и average case, - это O(log(n)), сам логарифм по базе 2, ибо ты каждый раз делишь сортированный массив на 2. Worst case - это максимальное количество действий, в данном случае обращений к ячейкам массива, которое произведет алгоритм. log(4) по базе 2 = 2, но действий, как видно по выводу, 3. В чем подвох? Ошибка явно в коде, математика здесь ошибиться не может.
183 1701399
>>701395
upd:
best case все же О(1), опечатался.
184 1701412
>>701395
O(k★log(n)) == O(log(n))
185 1701438
>>701412
Причем здесь k? В массиве нет повторяющихся элементов так-то. И твое уравнение верно только если k очень мал по сравнению с n (в идеале, близок к 1), если k ближе к n, то это уже O(n★log(n))
186 1701461
>>701438
Нет. Учебник открой
187 1701464
>>701438
Ты не знаешь матчасти.
Например
O(k*log(n) + n + 5) = O(log(n))
Потому что O показывает как будет расти время при росте числа элементов.
Screenshot20200525-124110Chrome.jpg53 Кб, 1072x208
188 1701487
>>701022
Работает as intended. Наверно происходит сначала сортировка с использованием компаратора, а потом поиск.
189 1701493
>>701464

> O(klog(n) + n + 5) = O(log(n))


O(k
log(n) + n + 5) = O(n) так-то. Линейная функция растёт быстрее логарифма.
190 1701541
>>701022
Почему это вообще работает? Как он понимает, что 4 ==4, если ему надо лямбду писать для сравнения больше/меньше?
191 1701542
>>701493
Конечная сложность зависит от значения k. Если оно мало по сравнению с n, то это O(n), да. Если k примерно равен n, то сложность будет равна O(nlog(n)) по твоей формуле.
192 1701545
>>701487
А как избежать сортировки? Ведь массив по дефолту уже был отсортирован
Screenshot.png106 Кб, 1300x759
193 1701553
>>701464
>>701461
Пикрилейтед. Перед вами массив из 10000 чисел от 1 до 10000 включительно, соответственно, без повторяющихся значений. log(10000) по базе 2 = 13.287
То бишь, самое максимальное количество операций поиска по вышеприведенным данным = 14 (потому что 13 имеет остаток, засим это округляется к бОльшему значению при наличии остатка в таких случаях).
Взяты пограничные значения, чтобы проверить максимальное кол-вл операций поиска. Все сходится, максимум = 14. Про какой k вы говорили яхз, повторяюсь, в массиве не было повторяющихся значения. ВРеменная сложность будет равнa O(k*log(n)) только если в отсортированном массиве будут k повторяющихся элементов.
194 1701652
>>701487
>>701553
>>701542
Ебать тут парад шизов. У одного бинарный поиск массив сортирует, у другого константа k зависит от n, третий на серьёзных щах считает количество действий по О-нотации.

Как выше пытались пояснить, О(n) означает что при увеличении количества входных данных например в два раза, время выполнения/потребление памяти увеличится примерно в два раза.
Так же и с O(log n). Если ты вместо 10000 элементов передашь 1000, то сравнений будет 10, а может 9, а может 11.
195 1701664
>>701652
Пчел, погугли про worst case, average case, worst case, ты пытаешься объяснить именно это, но не по-человечески.

Это все равно не отвечает на вопрос почему в том примере с лямбдой есть 3 операции сравнения, если МАКСИМУМ могут быть 2
196 1701667
>>701664
upd:
worst case, average case, best case*
197 1701669
>>701664
Ты какой то непробиваемый идиот.
198 1701701
>>701664
Потому что worst_case для бинарного поиска это что-то типа O(a + b log n)
Как видно из твоего вычислительного эксперимента, b=1. Но это все равно нихуя не важно, т.к. O(a + b log n)=O(log n).
199 1701727
>>701541
Бамп, аноны, объясните идиоту, если не сложно.
200 1701732
>>701541
1) проверить что (a < b) == false
2) проверить что (b < a) == false
???
3) profit
201 1701754
>>701732
Благодарю.
Screenshot.png174 Кб, 1470x539
202 1701757
>>701701
>>701669
Макаки, вы там совсем ёбу дали или да?
203 1701758
>>701757
Съеби уже.
204 1701760
>>701701
Worst case для отсортированного массива БЕЗ повторяющихся элементов - строго O(log(n)) с логарифмом по базе 2, откуда ты высрал a и b, шизоид?
205 1701787
>>701760
Да проще тебе ебало набить!
206 1701803
>>701758
O(2n) шизик, ты? Я узнал тебя по твоим шизоидным словам и высерам
207 1701818
>>701787
ты обоссан :-)
208 1701819
Программирование мне напоминает картины Дали, где костыли подпирают всё и вся.
209 1701820
>>701760
Господи, какие же тут дегенераты сидят пиздец просто.
210 1701834
>>701760

> с логарифмом по базе 2


Логарифмы по любой базе отличаются дург от друга константой-множителем. Это в школе изучают Поэтому все пишу O(log(n)), а не уточняют что логарифм двоичный, натуральный или что-то в этом духе.
Для этого логарифмы и придумали, можно с помощью таблицы логарифмов заменить трудоёмкое умножение сложением+поиском по таблице.
211 1701853
>>701820
Дегенераты вроде тебя? Согласен. Ведь вы только высераете бред, не имея ни пруфов, нихуя. Откуда высрано a и b, шизик? Или ты мало того, что слился, так еще и обосрался?
212 1701863
>>701853

>строго O(log(n)) с логарифмом по базе 2


Вот тебе пруф что ты не понимаешь о чем говоришь.
ВСЁ НАХУЙ, ВЫ ПОНИМАЕТЕ ЧТО ВСЁ? 213 1702286
214 1702334
>>702286
Ну на этот раз-то точно ВСЁ.
215 1702337
>>702286
Блядь, у меня на ноуте всего лишь 16 гб памяти и не расширить никак... Вот я соснул...
216 1702408
>>702286
Ну теперь c++ официально только для хакеров.
217 1702425
Можно ли назначать виджетам события (это коллбэки в принципе) через наследование и полиморфизм? Есть гуй (мой личный), там есть класс Button. В конечном приложении назначаю событие клика так:

class MyAppButton1 : public Button
{
public:
OnMouseClick(int x, int y) { / ... / }
};

Какие подводные? Или нельзя сказать однозначно без всего контекста, нормально это или нет?
218 1702468
Аноны, есть один метод, который принимает basic_iostream. Мне нужно создать и передать какой-то стрим, в который я могу завернуть указатель на массив char* и очень важно чтобы без копирования. Может я не нашел, но что ли нету такого в std из всего их набора стримов и буфферов? Похоже все привязано к strings но там буфер копируется. У буста есть такой, неужели до сих пор в стандарт не попал? Вроде бы в задеприкаченом strstream такое было, но не помню. Но нафиг мне депрекаты.
219 1702488
>>702425
А нахуя он public?
220 1702491
>>702468
Ой бля анончик там такие костыли что ебануться можно. Приду домой - скину
221 1702493
Анон, мне просто это не даёт покоя.
Ест у меня std::vector<double>, есть у меня std::transform, в котором pure функция (хз, возводит элемент вектора в степень и делит на 4), есть вектор для ответа.

Анон, я никогда не читал книги про работу компиляторов, но на мой взгляд, в релизе, ему очевидно, что можно распараллелить цикл, зная конечную архитектуру сборки. Почему тогда из коробки, само и неявно, не подключается какой-нибудь #pragma omp parallel for?
222 1702497
>>702493
используй параллельные алгоримты С++17. За тебя компилятор такие адовые вещи как многопоточка генерировать точно не будет
223 1702503
>>702491
Ну это да, должен быть приватным. Я хотел понять другое, нормально ли чисто идеологически делать отдельный класс на каждую кнопку в приложении?
image.png412 Кб, 1292x1866
224 1702514
>>702493

>Почему тогда из коробки, само и неявно, не подключается какой-нибудь #pragma omp parallel for?


У распараллеливания достаточно большие накладные расходы, поэтому массив должен быть достаточно большим. Огульно параллелить всё подряд очень сомнительная идея, но она много кому приодила в голову, например, разработчикам компиляторов PGI
225 1702522
>>702503
Ну если это какая-то навороченная кнопка, то хули нет? Посмотри, как в Qt это сделано: там если QAbstractButton и от него наследуются QPushButton и QToolButton. Если тебе нужно на твой кнопке картинку с аниме добавить - наследуй и добавляй
226 1702530
>>702522
Собственно, делаю микроминималистический гуй под wasm, соотношу с тем, как сделано в QT и WX. Но пока что так понял, что наследование от классов фреймворка в целом плохая практика?
227 1702534
>>702530
Создавать новый класс имеет смысл когда тебе нужен блюпринт, с помощью которого можно создавать много одинаковых объектов. Наверняка у тебя у разных кнопок разные обработчики, так зачем делать под это отдельный класс?
228 1702535
>>702530
Так они и сделаны в том числе для наследования, не?
229 1702537
>>702497
Msvc похоже что-то сам такое делает, и возможно intel cc тоже, так как мои перформанс тесты мило грузят весь проц, хотя я явно не писал ни политику выполнения для трансформ, ни omp. И включен только c++11, так как очень боюсь вероятной миграции на специфическую архитектуру.
>>702514
Спасибо
230 1702550
>>702534
Ну, если у кнопки собственный обработчик OnClick, то получается, она уже самим этим коллбэком отличается от инстанса своего суперкласса?

>>702535
А если final-class? "Не наследуй, худо будет" - это же для чего-то тоже нужно.
231 1702558
>>702550

>она уже самим этим коллбэком отличается от инстанса своего суперкласса?


Если у неё другое расположение, скажем, то она тоже отличается от инстанса суперкласса. Функции это первоклассные сущности, такие же, как числа
232 1702560
>>702550

>А если final-class


Проследуй в жава-тред, в плюсах насколько мне известно нет final/sealed
233 1702563
>>702558
Но ведь OnClick - это самый первый кандидат на полиморфизм, иначе нахуй это все вообще нужно?
234 1702566
>>702563
А где ты будешь единообразно обрабатывать разнородные кнопки?
236 1702571
>>702567
Век живи – век учись
237 1702573
238 1702577
>>702566
А зачем вообще нужно

>единообразно обрабатывать разнородные кнопки?


??
239 1702582
>>702577
Ну раз ты говоришь, что хочешь использовать полиморфизм в кнопках, значит ты хочешь единообразно обрабатывать разнородные кнопки.
240 1702586
>>702582
Да. Плохо ли для этого на каждую кнопку создавать отдельный класс?
241 1702588
>>702586
Если ты собираешься обрабатывать разнородные кнопки единообразнно (например, в цикле перебирать массив переменных базового класса или писать функцию, которая принимает аргумент базового класса) то нет, имеет смысл использовать наследование. Если не собираешься, то не имеет смысла.
242 1702600
>>702588
Кнопки отличаются от суперкласса только ивентом OnClick. Но если они отличаются, то это уже?
243 1702608
>>702600
У тебя есть два пути решения одной и той же проблемы
– Пердолить на каждый вид кнопки отдельный класс
– В базовом классе сделать "указатель на функцию" std::function и переназначать его для каждой кнопки
Обычно идут вторым путём, с точки зрения полиморфизма оба случая равнозначны
244 1702620
>>702286
Так а че, shared_ptr unique_ptr проблему не решило, им нужно теперь miracle_bugfree_ptr?? Наверняка тот код был написан на c++99 да и еще с самокрутками типа самопальных auto_ptr, или вообще на голимом си со strcpy и strdup и прочим говном. Теперь давай забаним плюсы, раз долбоебы даже c unique_ptr и move semantics не могут в безопасный код.
245 1702621
>>702566

> единообразно обрабатывать разнородные кнопки


Спасибо анон, за короткое но понятное объяснение полиморфизма
246 1702626
>>702530
Ты логику прямо в кнопку вешаешь что ли? Лучше заведи класс MyCallbackButton, наследуй его от своей "базовой кнопки", внутри добавь std::function и два метода - setCallback(std::function) и execCallback(). Последняя приватная и проверяет, установлен ли callback. Как только у тебя произошло какое-то нужное тебе событие, пишешь execCallback() и всё
247 1702627
И как обычно хз куда лучше писать, сюда или в C
Есть массив одной структуры, в структуре указатели на память. Часть памяти статически определяется, часть рантайм, маллоки и т.д.
Хочу подчищать память универсально, одной функцией, после отработки.

Напрашивается вопрос - как сделать так, чтобы free не выдавал ошибку на статической памяти? Отдельно следить что я там разметил динамически - не хочется, так дебильно.
248 1702629
>>702620
Двачую двачую двачую
249 1702674
>>702627
Статически это указатель на глобальную переменную или на стеке? Чет как-то криво звучит - в структуре хранить указатель на такую переменную. Почему не саму переменную тогда сделать частью структуры.

>сюда или в с


очевидно что в С с такими странными задачами. В С++ есть всякие смарт пойнтеры поэтому не нужно париться маллоками. Если хочется статики - делай ссылку вместо указателя.

struct s
{
s(b b) : _b(b) {}
std::unique_ptr<a> _a;
b& _b;
};

std::shared_ptr<s> ss = std::make_shared<s>(b);
в результате а dynamic, b - static и ничего освобождать не надо
только непонятно зачем ебаться со статикой, жалко что ли в shared обернуть.
250 1702701
>>702491
Двачую, бывало наследовал что-то от basic_ostream, каждый раз охуевал с неочевидности и залупности этой конструкции. Стараюсь с тех пор вообще с std стримами не связываться.
251 1702713
>>702701
Хитровыебанность этих ебучих стримов выдает авторство страуструпа. У них два десятка параллельных спецификаций, для стримов и соответствующих им буферов, и в результате нет ровно того, что мне надо. И ведь уверен что автор либы, которому подавай это ебучий стрим, у себя внутри просто засасывает весь буфер и передает в какой-нить примитив типа write, т.е. ему можно было бы передать char* и не выебываться, особенно когда скорость важна. Но нет блять он выставил наружу модный стрим, и к нему нужно теперь десять прокладок наклеить, чтобы сраный буфер передать.
252 1702736
float arr[4] = {0.2f, 1.4f, 5.67f, 0.71f};
int size = (sizeof(arr)/sizeof(*arr)); // == 2

Почему так?:(
253 1702741
>>702736
У меня 4 в вижаке
254 1702743
>>702741
Если считать в одном куске кода
Не совсем так..
я передаю в ф-цию function(arr)

внутри fuincton(float arr[])
получается
int size = (sizeof(arr)/sizeof(*arr)); // == 2

Опять указатели шалят?
255 1702750
>>702743
Потому что функция получает указатель, а передаешь ты ей указатель на массив из 4 символов. Потому результат разный.
256 1702751
>>702743
Ну да, ты же проебал информацию о размере, когда передал массив в функцию. Для неё arr — это просто указатель.
На 64-битной платформе получится 2, на 32-битной — 1.

Чтобы не проебывать размер, его надо принимать в шаблоне:
template <size_t size>
void function(float (&arr)[size])

вызывать так же - function(arr)
(ну и заодно вычислять ничего не надо)
257 1702752
Спасибо, сеньоры
258 1702778
>>702620
Тру стори. В каждом более-менее крупном проекте в котором приходилось работать была хуева туча легаси кода со своими поинтерами, строками, аллокаторами и прочими велосипедами разной степени упоротости.
260 1702790
>>702788
Разумеется, вместо вектора можно подсунуть обычные указатели на начало памяти и конец
261 1702896
>>702778
Нахуя?

Если проект реально крупный, то строки поинтеры скорее всего использовались в разных подсистемах, следовательно должны быть более-менее универсальными.
Зачем переписывать std::string например тогда?
262 1702905
Анчоусы, где можно найти список формул, таких, как производная высоты прыжка по времени, возвращающая координаты x и y или вектор движения? Может, есть какая-то библиотека, чтобы можно было задать начальное ускорение и угол прыжка и посчитать?
263 1702912
>>702905
Есть что-то типа такого https://www.reactphysics3d.com/
А формулы нужно гуглить без привязки к языку и потом разгребать что-то типа https://srri.umass.edu/sites/srri/files/dufresne-2001spj/index.pdf выбирая до какого уровня тебе нужно просчитывать всю хуйню
264 1702941
>>693081 (OP)

>comment.jpg


Тогда что учить то блять?
265 1702976
>>702941
R U S T
U
S
T

Объективно лучший язык.
266 1702993
Array & Vector это часть какого года библиотеки C++?
267 1703011
268 1703024
>>702993
Если ты про стандарты то к тому времени как вышел первый ISO стандарт stl уже была. Но в последующих редакциях она дорабатывалась вектор из 2020 может отличатся от вектора из 1998. Хотя у меня пример нет, может по факту и отличий нет.
269 1703079
>>702993
С создания STL
270 1703107
>>702941
То, что в вакансиях нужно.
271 1703575
>>702993
array c++11, vector c++98
272 1703630
>>702941
Все зависит от того зачем ты учишь.
image.png39 Кб, 932x570
273 1703722
Продолжаю учить плюсы по вот этому сайту ravesli.com
Дошёл до итогового теста в 5 главе https://ravesli.com/glava-5-itogovyj-test/
Намотался на второе задание. Я правильно понимаю, что смотреть ответ явно не стоит, а лучше перечитывать всю главу, потому что я нихуя из неё не усвоил? (Я типа написал код, который работает как надо за исключением самого важного - при выигрыше начинать новую игру. Вот тут у меня просто из головы вылетело как сделать так чтобы при else if(X = Y) ветвление завершалось нахуй и завершался цикл в котором функция с этим ветвлением вызывается. Пробовал goto, но нельзя какого-то хуя вызывать лейбл из другой функции как оказалось. Возможно я вообще не так всё сделал и с моим текущим подходом нихуя не выйдет и надо делать совершенно по другому и с нуля)
274 1703726
>>703722
Вызывай main после удовлетворения enVar == reVar
275 1703728
>>703726
Пишут, что так нельзя в c++
276 1703741
>>703722
Сколько тебе лет?
277 1703745
278 1703750
>>703745
Ну тебе уже не помочь, раз такие элементарные задания выполнить не можешь.
Подсказка: бесконечный цикл и break
279 1703753
>>703750
Да я уже всё сделал. Правда максимально всратно и мне ебло разобьют если я такой код покажу приличным людям. Но поставленную задачу выполняет.
280 1703757
>>703750
А вообще, все эти помойные сайтики тебя ничему не научат. Советую взять в руки хорошую книгу и учить язык по ней. А начать вообще с книги k&r по си. Там очень хорошие задачи и много интересных примеров, которые заставят поломать голову. Сама книга маленькая, всего около 300 страниц, читается за пару недель.
282 1703810
>>703771
Мне на плюсах надо, я за шарп не шарю. Получилось вот такое https://ideone.com/hWH6uu . Как видно у меня всё в main лежит, а новая игра вообще через goto блять. У авторов решение конечно гораздо элегантнее
283 1703819
>>703771
В голос с этой сисярп макаки. В простейшем коде умудрился нахуячить ошибок и наговнокодить:
1. Попыток 8, а не 7, при этом даже если 8 раз ты ответишь правильно, тебе скажут что ты проиграл.
2. Если ответишь правильно, то тебе напишут "Too big", а потом скажут, что ты выиграл.
3. Блок if не нужен.
4. Лишнее присваивание переменной guess
284 1703828
>>703810
Потому что, как сказал этот >>703757 господин, учиться нужно не по говносайтам. При этом любые обучающие сайты говно, при условии, что это не обучение какой-нибудь динамикопараше вида жопаскрипта, которая учится за вечер и пару бутылок водки.
Читаешь эту 300 страничную книгу, а потом берёшь книгу Страуструпа и начинаешь изучать C++.
285 1703885
>>702896
Я не он, но опыт такой тоже был и вопрос "нахуя" нужно задавать пионерам, которых уже с нами нет давно, как водится. Если проект реально крупный, то начали его в хуй знает какие времена, когда еще народ табак курил и йогой не занимался, не говоря уже про соблюдение каких-либо best practices в программировании. Интересно было бы узнать много ли народа писало на С++11 в 2012 или С++17 в 2018. Только только начали умирать от коронавируса престарелые писатели самопальных аллокаторов, взрощенные на голых сях и С++99, но дело их еще живет в больших и старых проектах. Но не побеждает.
286 1703886
>>702941
Да ничего, программирование скоро станет просто хобби, как музыка и искусство. UBI уже почти на подходе, будем получать небольшое пособие, и спорить в форумах, какой язык самый крутой. А реальный софт будет писать AI. Быстрый и без багов.
287 1703889
>>702896

>std::string


Кекнул на этом, в каждой конторе вижу свои 3-4 вариаций стрингов, уже даже не смешно.
288 1703892
>>703889
Застукать бы одного такого стрингера с поличным , и просто спросить вежливо - нахуя. Просто интересно знать. При чем неважно даже если это мегалегаси код. За такое и 10-20 лет назад нужно было убивать.
289 1703895
>>703886
Влажно
290 1703919
>>703892
>>702896
Яндекс использует свой класс string в плюсах, недавно видел в статье на хабре.
291 1703931
>>702941
Учиться надо программировать, используя для этого средство по душе. А то наслушаются всяких пидоров и прокрастинируют потом. Толку-то с труъшной технологии, если накодил пару часов за месяц? А вот выберешь, что прет, и количеством написанного кода компенсируешь всю нетруъшность своего взросления. Алсо, актуальное на рычноке и подходящее для учебы - взаимоотталкивающиеся вещи. Так что не стоит лучшие годы губить на всякое говно, на первой работе все равно обязательно насосешься, при чем капитально. Кстати, для концептуально прокачанного путь к нормальному трудоустройству короче, просто это беспалевно делается. Какой-нибудь задрот фреймворков даже не заподозрит, что ему отказали за общую тупость, и продолжит дрочить свою охуительную область знаний. Он на своем уровне и не может воспринять эту сторону действительности. А умного паренька, который даже язык в глаза не видел, невзначай возьмут, ведь адекваты негласно понимают, что нет ничего практичнее хорошей матчасти. Рыночек формально не способен этого понять, но жизнь все фиксит. Фактор необучаемости и гавнокода, несущего нулевую пользу для проекта, перечеркивает всю подкованность по стеку.
292 1703988
>>702896
Сложно представить себе что-то более уебанское чем std::string
293 1703990
>>703988
LPCTSTR
294 1703998
>>703988
AnsiString и, о да, строки в ДЕЛФИ, где первым символом длина строки
295 1704010
>>703828
И после этих двух книг брать ещё одну, чтобы наверстать то, что добавили в язык за последние 20 лет?
Да это пиздец, лучше сразу что-нибудь современное читать, например вот это
https://codernet.ru/books/c_plus/beginning_c_17_from_novice_to_professional/
и не тратить время на всякие strcpy и т.п. Если в книге не упоминается string_view, например, то сразу нахой.
296 1704012
>>703892
Чтобы стандартизировать кодировку, например. У встроенных строк как-то уж очень долго налаживается дружба с юникодом. С появления char16_t ещё 10 лет не исполнилось, а char8_t вот только подъезжает.
Ну и всякого рода оптимизации. Тысячи их.
297 1704026
Чето осознал ультрапроеб в жизни, через буквально дней 20 диплом, а после свободное плавание, решил выбрать как основной профиль с++ и дрочил его годик основательно так, хотя и до этого знал его. Стал с недавних пор смотреть рынок вакансий по дс2 и..бля ну и хуета, хуй без опыта куда возьмут, а где берут, то стек технологий какой-то ебанутый или сама компания какой-то ебанутой хуйней занимается, чета ваще пиздец, пчелы
image.png785 Кб, 2696x1372
298 1704034
>>704026

>пчелы



Продолжай чилить, айти мёртвое для вката
299 1704234
>>704010
А ты как хотел? Или ты один из тех долбоебов, которые думают, что изучив динамикопарашу они стали программистами и знать, что там внизу им совсем не надо? После чего такие удивляются, почему это у них цикл в котором они строки складывают, жрёт пару гигабайт памяти.
Весь сахарок в 17 стандарте строится на том что было до него, поэтому для того чтобы писать хороший код ты должен изучить эти основы, только после этого уже смотреть на сахарок и радоваться, потому что понимаешь как надо было бы писать код, если бы тебе этого сахара не насыпали.
300 1704256
>>703988
System::String
301 1704374
>>704026
год-два позанимайся какой-то ебанутой хуйней с ебанутым стэком, и дальше ищи нормальную работу. Я в свое время вообще писал на каком-то ебанутом языке, формально числившись С++ разработчиком. Ради того самого ОПЫТА в резюме.
302 1704396
>>704374
Раз уж это С++ тред, не самый раковый, но я тоже чтобы вкотиться программировал на какой-то хуите богомерзкой ради ОПЫТА
303 1704400
>>704396
И начальник\директор тогда сказал
"Вот, молодые то идут к нам, все на javascript\python хотят программировать, чтобы потом в гугле работать, а я всю жизнь был прикладным программистом" - примерно слово в слово
304 1704481
>>703988
Далеко ходить не надо, просто посмотри на свой пернувший в лужу пост с наездом на стринг без всякого обоснования
Безымянный.png12 Кб, 594x175
305 1704552
Аноны, два дня потратил на то, чтобы написать игру. Теперь понимаю, какой я дебил.
Выключили электричество а вместе с ним и мой комп. После этого захожу в проект, а он может прочесть 1 файл из 3. На хедер мне похуй, вся проблема в cpp файле, который открывается через блокнот, в котором ничего не отображается. Шиндовс говорит, что какие-то байты в нем все еще есть. Как его восстановить, не хочу, чтобы 2 дня трудов пропали за зря? Может, у него шапка слетела и попытаться переписать байты с новой шапкой? (Хуй знает вообще, как он устроен)
306 1704582
>>704552
орнул
307 1704605
>>704552
Открой в хекс редакторе и посмотри, если там все одинаковыми байтами забито то все.
308 1704623
>>704605
Да, пиздец.
309 1704624
>>704623
Что за игра хоть?
310 1704634
>>704624
https://yadi.sk/d/3fgFzzf_2ztsJA
Курсач другу писал. Но, похоже, не судьба.
311 1704662
>>704552
Так в этом игра и была. Ты проиграл электрикам 0:1. Пиши по новой чтобы счет сравнять.
312 1704679
Кресты очень люблю, просто пиздец как!

template <typename T, typename = typename std::enable_if<!std::is_base_of<ParentClass,typename std::decay<T>::type>::value>::type>
313 1704696
>>704679

> template <typename T, typename = typename std::enable_if<!std::is_base_of<ParentClass,typename std::decay<T>::type>::value>::type>


Ох, быдлу не завезли c++17?

> template<class T, class = std::enable_if_t<!std::is_base_of_v<ParentClass, std::decay_t<T>>>>


Или даже более предпочтительный

> template<class T>


> void foo() {


> static_assert(std::is_base_of_v<ParentClass, std::decay_t<T>>);


...

>}

314 1704717
>>704696

> c++17


Так то было в c++14
315 1704762
Что такое type deduction? Переводчит что то непонятное выдает
316 1704766
>>704762
Автоматический вывод типа методом дедукции.
317 1704815
>>702905

>производная высоты прыжка по времени


Это просто скорость называется. Может тебе ускорение нужно, тогда это 2-я. 3-я называет джерк. 4-я джолт. По-русски можно придумать типа рывок, потом толчок, потом чпок.
318 1704883
>>704766
Элементарно, Ватсон!
Убийца std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>::__ostream_type& (*)(std::basic_ostream<_CharT, _Traits>::__ostream_type&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]
319 1704934
>>703885
тащемта кастомные аллокаторы только щас и писать
инфраструктуру под них доднлали только в 17м стандарте
мимо безработный мамонт
320 1704941
>>704762
Чтобу не писать аргументы шаблона класса для некоторых аргументов конструктора. Смотри deduction guides
321 1704946
>>704941
>>704766
Я понял. Просто не мог сразу на русский адекватно перевести. Имеется ввиду "угадывание" (догадки компидятора какой тип перемнной передался) типов
322 1705008
Помогите составить шаблонную фукнцию, которая принимает std::vector<T> или std::array<T> и второй аргумент, который должен быть типа T.

У меня получилось скопипастить с SO, но там нет проверки типов. Моя весрия с дополнением не компилится:

https://onlinegdb.com/SJp5e_hiU
323 1705016
>>704946
Не совсем. Это чтобы по аргумента конструктора вывести параметры класса.
Например https://en.cppreference.com/w/cpp/container/vector/deduction_guides
324 1705027
>>704234
Основы — это основы, их в любой книге для начинающего дадут так или иначе.
Я говорю про всякую устаревшую фигню, из разряда, например, что нет смысла сначала учиться не возвращать "большие" объекты из функции по значению, а потом учиться, что теперь так можно. Или читать про какие-нибудь wstring_convert и codecvt, а потом узнавать, что они пукнули и обмякли. Или вникать в фантазии Страуструпа про то, какие безграничные возможности открывает наследование фасетов локалей, чтобы потом выяснить, что они обосрались с кодировками переменной длины.
Ну или те же функции из сишки, которые можно просто посмотреть по докам если приспичит, а специально учить их нет никакого смысла (тем более, какой-нибудь современный вижак тебя заебет варнингами при попытке ими воспользоваться).
Ещё такой момент, книга Страуструпа в основном описывает только стандарт. Про тот же wchar там ты прочитаешь только, что это тип достаточного размера чтобы вмещать неизвестно что. А в книге, на которую я дал линк, например, сразу написано, как оно реально живет на разных платформах, и что с этим делать.
Annotation 2020-05-28 105904.png18 Кб, 489x200
325 1705031
>>705008
мож вот так?
326 1705101
Посоветуйте каких книг или циклов статей на русском о c++17/20
327 1705108
std::map<std::string,int> mp {{"sd",3},{"as",1},{"aaa",6}};
for(auto& [a,b] : mp){
std::cout << a << " " << b << "\n";
}
Почему не компилируется?
Пишет

> error: expected unqualified-id before '[' token for(const auto& [a,b] : mp){

328 1705113
>>705108
c++17 включен? У меня компилируется.
329 1705123
>>705016
Спасибо
330 1705152
>>705101

>русские книги по 17/20



наивный ) "Русское" программирование еще не вошло в эру C++11, а ты про такое ноухау
331 1705170
>>705152
Книг по 11/14 полно, тот же майерс. По 17 думаю должны были что то хорошее перевести
332 1705195
>>705031
Спасибо, но тогда компилируется для вызовов типа
f(vector<unsigned>, int), А я хочу чтобы тип был строк одинаковый.
Например, этот вариант рабоатет только для std::array, но он требует, чтобы два типа были строго одинаковые:

template<typename T, std::size_t size>
auto f(const std::array<T, size>& arr, T o)
{
auto it = std::find(arr.begin(), arr.end(), o);
if ( it != arr.end() ) {
std::cout << "found\n";
} else {
std::cout << "not found\n";
}
}
333 1705197
>>705195
quickfix
*А я хочу, чтобы тип был строго одинаковый.
334 1705198
В мире умирает котёнок, когда кто-то пишет std::
335 1705276
>>705195
хм, можно ассерт добавить

template <typename T, typename U>
void f(const T& arr, U value)
{
static_assert(std::is_same<T::value_type, U>::value, "array and value must be of the same type");
...
336 1705297
>>705198
This. Не пользуйтесь стандартной библиотекой, пишите своё.
337 1705396
В Qt можно как-то проверить, не течет ли память? Ну там если иерархия нарушена, вдруг где-то забыл parent или неверный указал.
338 1705485
>>705276
давай ещё раз.
Почему через value_type без разницы тип, а когда параметр шаблона общий - разница есть?

https://onlinegdb.com/BkcP5b6iU

snippet here:

#include <array>
#include <vector>
#include <deque>
#include <utility>
#include <cstddef>
#include <iostream>
#include <algorithm>

template<typename T, std::size_t size>
auto f(const std::array<T, size>& arr, T o)
{
auto it = std::find(arr.begin(), arr.end(), o);
if ( it != arr.end() ) {
std::cout << "found\n";
} else {
std::cout << "not found\n";
}
}

template<typename T, std::size_t size>
auto f2(const std::array<T, size>& arr, typename std::array<T, size>::value_type o)
{
auto it = std::find(arr.begin(), arr.end(), o);
if ( it != arr.end() ) {
std::cout << "found\n";
} else {
std::cout << "not found\n";
}
}

int main()
{
std::array arr = {0u, 5u};
f(arr, 5u);
// f(arr, 5); //error
f2(arr, 5u);
f2(arr, 5);
return 0;
}
338 1705485
>>705276
давай ещё раз.
Почему через value_type без разницы тип, а когда параметр шаблона общий - разница есть?

https://onlinegdb.com/BkcP5b6iU

snippet here:

#include <array>
#include <vector>
#include <deque>
#include <utility>
#include <cstddef>
#include <iostream>
#include <algorithm>

template<typename T, std::size_t size>
auto f(const std::array<T, size>& arr, T o)
{
auto it = std::find(arr.begin(), arr.end(), o);
if ( it != arr.end() ) {
std::cout << "found\n";
} else {
std::cout << "not found\n";
}
}

template<typename T, std::size_t size>
auto f2(const std::array<T, size>& arr, typename std::array<T, size>::value_type o)
{
auto it = std::find(arr.begin(), arr.end(), o);
if ( it != arr.end() ) {
std::cout << "found\n";
} else {
std::cout << "not found\n";
}
}

int main()
{
std::array arr = {0u, 5u};
f(arr, 5u);
// f(arr, 5); //error
f2(arr, 5u);
f2(arr, 5);
return 0;
}
339 1705494
Это хорошие книги?
340 1705519
>>705494
Хорошие, но несколько устарели
341 1705542
>>705485
Ну собственно по той же причине, почему вот это не компилируется:

template <typename T>
T sum(T arg1, T arg2)
{
return arg1 + arg2;
}

sum(1, 5u);

компилятор не может автоматически определить, какой из двух типов брать за T.
А с value_type у него, видимо, никакой дилеммы нет, и он сразу понимает, что T — это то, что в контейнере.
342 1705579
>>705485
>>705542
Все прекрасно работает и без value_type https://ideone.com/8k6qlC
343 1705615
>>705579
Изначально value_type добавили, чтобы сделать функцию, которая может принимать как vector, так и array.

Хотя это можно и span-ами делать, если их завезли уже.
344 1705623
>>705615

> Изначально value_type добавили, чтобы сделать функцию, которая может принимать как vector, так и array.


Пиздос. Скоро динамическую типизацию завезут
345 1705838
>>705623
Она в крестах с самого начала, шаблоны называется
346 1705850
>>705838
Ну ты не сравнивай
347 1705869
>>705838

>шаблоны


>динамическое


Ну формально компайл-тайм таки статический. Другой вопрос что во время компиляции шаблоны выполняются как бы динамически. даже хотят jit в интерпретатор типов захуярить а то ЧЕ-ТО ТОРМОЗИТ
А динамикопараша регулярно переизобретается еще со времен С. Начиная с void* до СОМ и QObject.
348 1705932
>>705519
А какие хорошие и современные?
349 1706053
https://habr.com/ru/post/344206/
Есть ли предел сложности крестов?
15516430959070.jpg88 Кб, 700x554
350 1706328
>>706053

> кресты


> предел сложности


Найс рофлишь.
351 1706350
>>706328
24 дня всего, за такое время даже жопаскрипт не учится
352 1706356
>>705623
В смысле?
353 1706357
Поясните по этому видосу https://www.youtube.com/watch?v=mrq2nmKz5qI
Вопрос из комментов: Не понял синтаксиса функций begin и end. Они должны возвращать объект типа Iterator. Однако, они возвращают объект типа T*.
354 1706364
Допустим я пишу игру. У меня есть класс Placeable, хранящий координаты объекта, Damageable, хранящий прочность и защиту и обрабатывающий получение урона, Temperature, хранящий данные о температуре объекта, и так далее. Куча разных свойств. В результате, другие классы, например, Npc будет наследоваться если ни от них всех, то от большого количества. Это нормальная практика так абузить множественное наследование?
355 1706378
>>706364

Для игор придумали Entity–component–system (ECS), не изобретай велосипед
356 1706382
>>706378
Спасибо, посмотрю.
Annotation 2020-05-29 035554.png259 Кб, 1020x707
357 1706386
>>693081 (OP)

С++ тормозная параша, надеюсь они на собеседовании не гоняют кандидата по STL и RTTI
358 1706390
>>706386
Дай ссылку, впадлу гуглить.
360 1706397
>>706357
Непонятный вопрос. У него в видео они и так возвращают объекты типа Iterator.
361 1706398
>>706393

>Video games like Assassin's Creed or Rainbow Six



Вангую, там криворучки-аутсорсеры сидят, потому и гавнодвижок
362 1706399
>>706397
У него в 37 и 38 строке функции типа итератор, но возвращают они указатели на первую строку и последнюю соответственно.
363 1706402
>>706399
Iterator у него конструируется из указателя (строка 46), и вызов конструктора происходит автоматически.
364 1706406
>>706402
Ну конструируется по указателю и что?

Я не понимаю все равно. Тут функция класса которая возвращает строку. Как переменной класса можно присвоить строку?
365 1706408
>>706399

>последнюю


На следующую за последней. И вообще иди учебник читай.
366 1706413
>>706406

>Тут функция класса которая возвращает строку.


Не строку, а указатель на неё.
T — это char✱
arr - это T✱
следовательно, return arr возвращает char✱✱

>Как переменной класса можно присвоить строку?


Ты про какую переменную?
367 1706425
>>706406
Блядь, забудь слово "присвоить", понял? Итератор инстанцируется этим return'ом. Не присваивается, а создается. Потому что есть конструктор из указателя (строка 46, как сказали выше), который передан в return.
368 1706430
>>706425

> инстанцируется


Сложное слово. Чем оно отличается от инициализации?
369 1706438
>>706430
Инициализация значения, у числа.
инстанцилищация у класса, сделать экземпляр, объект
370 1706534
>>705008
template<class T, template<class> class Cont>
void foo(Cont<T>, T)

Попробуй, хотя я не уверен, что не нужно указывать ещё и всякие там аллокаторы
371 1706549
>>706386

>No Exception Handling


>No STL containers


>No Boost includes in Engine


Ясно понятно.
372 1706560
>>706549
>>706398
Ебать пичот.
В гуглах/яндексах/итд по вашей логике тоже сплошные дауны?
373 1706563
>>706053
Нет.
Есть крайне интересный пропозал https://wg21.link/p0707
374 1706565
>>705869
И std::any
375 1706588
>>706549
Ну и что из этого по-твоему привело к багам на твоих видео?
376 1706690
Пиздец, в разделе и так одни ебанаты сидят, так теперь ещё и игрушкодауны приехали со своими смищными видосами
377 1706709
>>706690
а я поржал
378 1706710
>>706386
Геймдев просто исторически был довольно консервативный в плане всяких фич. Потому что иначе проблематично, когда не знаешь, на какую ещё мыльницу придется в будущем портировать игру, и какого уровня свежести и разъебанности на ней будет компилятор.
379 1706735
>>706386

>STL, boost


Так за эту парашу в любой нормальной конторе всегда ссали за воротник и заслужено били по тупому ебалу.
380 1706746
Двач, а будет ли сбиваться итерирование вектора если удалять элементы вектора вот в таком вот цикле - for (auto const& value: a)?
381 1706791
>>706735
А что не так с STL?
382 1706813
>>706791
С стл не нужно свой класс строки писать. Несерьёзная разработка получается.
383 1706818
>>706746
Да. Делай erase–remove.
384 1706825
В Qt примерах некоторые объекты создают чисто в конструкторе класса виджета:
QVBoxLayout ''vbox = new QVBoxLayout(this);
А некоторые объявляют сначала в хедере:
private:
QPushButton ''okBtn;
И потом выделяют под них память в конструкторе
okBtn = new QPushButton("OK", this);
Как лучше делать?
385 1706852
>>706825
Тут просто явно показывается, что лейаут ты сделал и забыл, а состояние кнопарика возможно будет дёргаться из других методов (хотя по идее все коннекты можно и в конструкторе сделать).
Лучше забей и научись формошлепить в дизайнере.
386 1706859
>>706852
Да нужно без дизайнера делать, студень я.
387 1706902
Двач, а в списке итерируясь как проверить является ли следующий элемент концом списка или нет?
В списке i + 1 не работает.
388 1706916
>>706902
Смотря как список реализован. Типа
if (curr_node->next->next == nullptr) { / ... / }
389 1706929
>>706916
Список stl
390 1706976
>>706902
https://stackoverflow.com/questions/3516196/testing-whether-an-iterator-points-to-the-last-item
Там много странных фокусов предлагают.
391 1706979
>>706902

>В списке i + 1 не работает


Лолват?
392 1706983
В смысле делай инкремент, а не плюс 1.
393 1707149
Анончики, как считаете: нужно ли делать переменные (чаще всего константы), значения которых точно больше нуля, беззнаковыми?
Например, размер экрана.
Сейчас проебался на этом на этом мальца. При создании установил положение сущности по x в -R_WIDTH использовал эту беззнаковую константу, чтобы не писать -1000 например, т.е. (как думал) за пределами экрана, а нихуя. Оно в UINT_MAX установилось.
394 1707168
>>707149
Для оконных координат используй знаковые. А то потом заебешься работать с координатами за пределами поверхностей, вроде координат курсора.
395 1707178
Как так получилось, что в стандартной библиотеке используются названия строчными буквами, через подчеркивание, а в гугловском стайл гайде и паре проектов, в которые я посмотрел, используется кемелкейс. Это специально так сделано, чтобы отличать объекты из стандартной библиотеки от всего остального или что? Мешанина стилей же получается.
396 1707187
>>706378
Кстати мне всегда интересно было ECS переводится как система компонентов сущности? Или это типо 3 разных элемента как MVC например модель-представление-контроллер.
397 1707200
>>707178
Тебя ебать не должно. Гугловский стайл гайд - тупое говно.
398 1707203
>>707200
Ну так, а какой не говно? И это не только там так, а и в Qt, например.
399 1707204
>>707203
И QT тоже говно. Оформляй, как в STL
400 1707208
>>706364

> У меня есть класс Placeable


Замени на vec2f pos; если это двумерная игра

> Damageable, хранящий прочность и защиту


Сделай класс\структуру Stats

> Temperature, хранящий данные о температуре объекта урона


Перенеси в Stats

> Npc будет наследоваться если ни от них всех


Сделай Object: совсем базовые возможности для объекта
Унаследуй и сделай GameObject, объекты с которыми можно взаимодействовать: двери, рычаги
Дальше NPC: тут уже много чего, атака других npc, получение урона, применение способностей

Можешь посмотреть на структуру классов в mangos (эмулятор сервера для вов, если играл в него то будет несколько проще разобраться)
Правда, думаю, будет слишком сложно сразу так разобраться в нём.
401 1707210
>>707203

> Ну так, а какой не говно?


Твой личный или тот, который принят в твоей фирме\команде.
Можешь длянуть стайлгайд в nasa
Это вообще пиздос (в хорошем смысле), но он ориентирован на Си кажется
402 1707247
>>707204
>>707210
Сомнительная какая-то история. Но через подчеркивание мне в любом случае нравится больше, так что да, буду его использовать.

> но он ориентирован на Си


Да, он про С.
Алсо, в их репозитории на гитхабе https://github.com/nasa/fprime/blob/master/Os/Task.hpp всё тот же кэмэлкейс.
403 1707262
>>707208
Интересно, посмотрю.
404 1707264
>>706746
Для такой хуйни придумали remove_if
405 1707274
>>707247
Объясни-ка, как по словам прыгать в снейк-кейсе? Два раза, чтобы через _ перепрыгнуть?
406 1707286
>>707274
В смысле? Так же как и в кэмэлкейсе. e, w, b. Если ты про стрелочки с зажатым контролом, то у меня через всё слово прыгает.
407 1707336
Как лучше размещать инклюды в разных файлах чтобы они не повторялись?
408 1707353
>>707336
Да пусть повторяются
409 1707358
>>706386
Дайте посмотреть на православный с точки зрения геймдева вектор или мапу. Всегда было интересно.
410 1707397
>>707286
Ну смотри. Есть какой-нибудь идентификатор "my_class". Каретка стоит перед "my". Я жму Ctrl+Right, где будет каретка?
411 1707401
>>707336
Размещай так, чтобы в хедере было ровно то, что используется - не больше и не меньше. Но при этом старайся по максимуму использовать предварительное объявление.
412 1707419
>>707358

Вот лучше посмотри на реализацию string от движка сириус сэма

https://github.com/Croteam-official/Serious-Engine/blob/master/Sources/Engine/Base/CTString.h
413 1707421
>>707401
Ну вот у меня виджеты qt разные, они наследуются от каких-то готовых классов, плюс везде используются всякие типовые классы типа виджетов размещения.
А что за предварительное объявление?
414 1707426
>>707262
Можешь начать с https://github.com/mangoszero/ это эмулятор классики
mangosone - TBC
mangostwo - Wotlk и тд

Там же есть готовые бинари, но придётся самому базу накатить + кое-какие данные нужно достать из клиента. Вроде, не особо сложно, просто не быстро.
Либо поискать готовые сборки с базой и всеми делами, например https://www.ownedcore.com/forums/world-of-warcraft/world-of-warcraft-emulator-servers/wow-emu-general-releases/613280-elysium-core-1-12-repack-including-mmaps-optional-vendors.html
Также в мангос встроен движок луа который позволяет добавлять функционал не пересобирая сервер: http://eluna.uiwow.com/
Можешь эту структуру кода спиздить и переделать под себя.
415 1707427
>>707421
Обычно в таком случае подключается заголовок с базовым классом, а остальные штуковины предварительно объявляются (у тебя ведь только указатели, да?)
416 1707430
Если я перегружу оператор = для статичных переменных, где возвращается this, то он будет работать для переменных выделенных с помощью new? Вот например так

p1 - типа myClass
- там уже что-то лежит
myClass* p2 = new myClass
p2 = p1

То вызовется мой перегруженный оператор?
417 1707431
>>707419

> inline CTString(void);


Как не умели в 2002 пользоваться ключевыми словами, так до сих пор не умеют
meh.webm363 Кб, webm,
550x300, 0:11
418 1707443
>>707397
После "class". Может на винде иначе, я не знаю.
419 1707446
>>707431
Учитывая состояние компиляторов в 2002 — вполне возможно что это вынужденная мера, лул.
420 1707449
>>707446
>>707431
Я слышал, что в каком-то компиляторе была такая шутка: в нём был счётчик употребления в коде ключевого слова "inline". Если счётчик превышал какое-то значение, то компилятор дальше игнорировал все инлайны.
А запись вида func( void ); пришла из Си. Там таким образом обозначалось что функция не принимает аргументов, а пустые скобки означали любое количество аргументов.
421 1707450
>>707426
Благодарю.
422 1707452
>>707443
Да я не про это. Есть такая штуковина, называется CamelHumps (он же subword navigation). Очень полезная и удобная штука, т.к. зачастую нужно изменить что-то в середине слова и без этого приходится стрелками искать позицию, или ещё хуже - мышкой. Так вот мне интересно, как оно работает со снейк-кейсом.
423 1707456
>>707452
Не знаю, не встречал такого.
424 1707458
>>707452
Может быть зависит от алгоритма который встроен в редактор\иде?
Сейчас проверил в qt creator
Для my_title (курсор находится перед m), после ctrl+r переместился к t
Для myTitle аналогично
425 1707460
>>707458

> ctrl+r


ctrl+right точнее
426 1707500
>>707449

>Я слышал, что в каком-то компиляторе была такая шутка


Ты слышал шутку.
Не сравнивай сегодняшние компиляторы и их возможности с компиляторами 20-ти летней давности.

>А запись вида func( void ); пришла из Си


Ахуеть, спасибо зумер, я-то и не в курсе был.
Ещё раз — а ты уверен, что на всех таргетах (кроме пк были ещё nintendo gamecube, xbox, ps2) были достаточно поддерживающие плюсы компиляторы? Если что, в 2001 уже был первый релиз и очевидно что разрабатывать начали даже до 2000-х.
Я вот лично сомневаюсь, что в среднем компиляторе по больнице в то время была реализована хотя бы половина 98-го стандарта.
427 1707501
>>707430

>вызовется мой перегруженный оператор?


нет

>оператор= для статичных переменных


лол))
428 1707536
>>707427
Ты имеешь в виду в хедере класса надо указывать все эти QLineedit и кнопки, там же инклюдить классы для этих объектов, а в cpp файле только подключать этот хедер?
У меня в конструкторе без объявления они создаются через new, доступа к ним не будет что ли?
429 1707552
А вот мне интересно. Пишет человек игру, использует новые фишки языка. Игра работает на линукс и виндовс. Потом он хочет перенести ее на ps. Сильно ли ему придется менять код? И где он вообще будет брать стандарты языка для данной платформы?
430 1707575
>>707536
Если они будут взаимодействовать только через коннекты объявленные в конструкторе, то пофиг.
431 1707577
>>707552
В 2к20+ уже все хорошо с этим, у Sony юзает LLVM (и вообще x86 процессор а не кастомную залупу) а м$ не лезет в анус и тоже быстро подхватывает последние стандарты, так что такой проблемы нет (ну, разве что последний стандарт может на пару-тройку лет запоздать до выхода нового поколения с новым девкитом, лол). Но такого, как лет 10-15 назад, чтобы у всех были свои процессоры и компиляторы для ц (не всегда даже с классами как в случае с псп) — уже нет и в помине, даже на рынке китайского андроид-скама уже один арм одной версии остался.
432 1707578
>>707577

>LLVM


В купе с цлангом, конешно.
433 1707580
>>707552

>Потом он хочет перенести ее на ps. Сильно ли ему придется менять код?


На первую? Тогда очень сильно. На ps4 - вижалстудия с несвежим clang.
434 1707586
>>702788
>>702790
Спасибо, я так и сделал, но похоже не судьба. Та либа, которой этот стрим нужен похоже елозеет по стриму туда-сюда, что вроде бы не должно быть проблемой. Но там какие-то косяки. А когда я подсунул ей класс из буста, то все работает - он тоже наследует basic_streambuf и оверрайдит все методы, и оказалось что либа-сука дергает кучу этих других методов зачем-то, которые тоже нужно самому имплементить типа underflow и seek. Короче это майндфак и того не стоит. Придется буст юзать.
435 1707587
>>707575
Да я пока не очень представляю как они будут взаимодействовать, например кнопка "удалить" должна удалять выделенную строку из таблицы-представления, то есть в слот-обработчик нажатия надо как-то передать это значение столбца выделенной строки, чтобы я мог сформировать запрос на удаление.
Не пилил подобное на qt?
436 1707588
>>706791
буст так-то это основа всех фичей в новых версиях С++ начиная с 11-й. Но понимаю, с бустом скучно, нет возможности пилить свои собственые примочки, которые гораздо лучше, чем стандартные. Можно свой класс тред написать.
437 1707636
>>707587
Ну и что непонятного? Подключил кнопку к обработчику, внутри спросил у таблицы выделение, узнал строку, попросил модель удалить эту строку.
Это же basic хуйня, без неё ты в qt глубоко не продвинешься
438 1707638
>>707586
А что именно из буста ты юзаешь? Там вроде несколько хуёвин могут такое делать
439 1707639
Алсо, знающие люди, подскажите, что там Qt Company опять выдумала для наёба людей на деньги? 5.15 всё ещё LGPL?
440 1707686
>>707149
Не нужно. Используй беззнаковые только там, где оно необходимо (в байтоебстве каком-нибудь).
Даже сам Страуструп и другие авторы признавали, что применение беззнаковых в стандартной библиотеке (типа size_t) было проёбом, и из-за них случается много ошибок.
Кому интересно, смотрите тут https://www.youtube.com/watch?v=Puio5dly9N8 на 9:50, 41:08, и 1:02:50
441 1707755
Есть pdf таблица. Как ее распарсить?
442 1707767
>>707149
Беззнаковые нужны только тогда, когда тебе нужно хранить большие положительные числа, самый типичный пример - хранене Id.
И оно не поможет в случае если значение ниже нуля недопустимо. Вычтешь ты из беззнакового нуля единицу, получишь arithmetic overflow или макс значение для этого беззнакового числа.
443 1707859
>>707767

>Вычтешь ты из беззнакового нуля единицу, получишь arithmetic overflow или макс значение для этого беззнакового числа.


Можно, наоборот, добавлять единицу: ( size_t i = 0; i + 1 < width; ++i ), если нужно i < width - 1.
444 1707863
>>707859
А можно без всей этой анальной эквилибристики
445 1707866
>>707863

>А можно без всей этой анальной эквилибристики


Тогда придется постоянно касты делать или ворнинги отключать.
446 1707896
>>707755
Контрол Ц контрол В в Эксель XD
447 1707900
>>707587

>Да я пока не очень представляю как они будут взаимодействовать


Тогда выноси в хеадер все, потом будешь смотреть что нужно было что нет.
448 1707914
Зачем используют -fvisibility=hidden?
Нашел только ответ чтобы в таблицу символов не попадали ненужные символы. Это как-то заметно улучшает производительность? Вроде как api определяют заголовочные файлы, которые либа будет предоставлять, так что в плане скрытия внутренних деталей наверное это не особо имеет значение чтобы в таблицу попадали тольок те символы, которые нужны.
449 1707924
>>707866
Часто индексы юзаешь?
Из личной практики могу вспомнить лишь UI. Для всего остального есть ranges и iterators
450 1707936
>>707914
Вообще это в духе современного c++.
На винде оно и так всё скрыто по умолчанию, с модулями тоже будет пролазить только то, что явно экспортируешь и зависимости.

Ну а зачем - потому что бритва Оккама
451 1707973
Двач, помогите перевести вот это на wchar_t:
int number = 10;
char buffer[25];
std::sprintf(buffer, "%.2f", (float)number / 100);
452 1707981
>>694188
У тебя ошибка то в одном вылазит, хули ты мудак то такой
453 1708004
>>707924

>Часто индексы юзаешь?


Регулярно. У меня графоний, часто алгоритмы приходится кодить. Плюс для дебага почти всегда индекс элемента полезен.
454 1708035
>>707981
Да нет у qobject копи-конструктора, выше писали уже ему.
455 1708179
Мне тут советовали читать майерса для плюсов. Но мне показалось что это уже для чуть шарящих людей. Я из stl знаю только вектора и некоторые функции из algorithm. Точно майерс то, что мне нужно?
456 1708180
>>708179
Мне говорили читать effective modern c++. Но я тогда нвверное вопрос неправильно задал
457 1708199
>>708180
читай у Мейерса "Эффективное использование С++" и "Наиболее эффективное использование С++". Потом "Эффективное использование STL"

"effective modern c++" нужно читать только когда начнешь хорошо разбираться в C++11
458 1708203
>>708199

> читай у Мейерса "Эффективное использование С++" и "Наиболее эффективное использование С++". Потом "Эффективное использование STL"


Это же все устарело
459 1708208
>>708203

>Это же все устарело


Че несешь? Больше 3/4 советов еще актуальны. А с учетом возможности столкнуться со старой кодовой базой то и остальные пригодятся
460 1708211
>>703931

>наслушаются всяких пидоров и прокрастинируют


Ну так ты сам на это и подталкиваешь, дядь, возводя в абсолют труЪ программиста, который не знает ни одного языка, но зато знает Vатан, задроту фреймворка. Итого у условного вкатывальщика-студента складывается впечатление, что языки изучать - сродни пинанию хуёв, а вот матан знать это ТруЪ. Затем он задаётся вопросом: "А какой же самый правильный способ изучения матана?" - на что его мозг сразу генерит ответ - "Конечно же, по советским учебника, они же ТруЪ!". Затем этот лихой молодец скачивает задачник Демидовича и пару томов какого-нибудь Зорича и начинает хуярить. Вот долго такой протянет на ручной тяге?

P. S.На следующий день же всё бросит и продолжит свою прокастинацию
461 1708288
>>707636
Да я пока на поверхности плаваю, да, поэтому простые/глупые вопросы такие.
Алсо сделал диалоговое окно ввода данных в таблицу, так вот в слоте не видно модель данных, она у меня чисто в конструкторе создается без объявления. Если вынести ее в объявление как поле класса в секцию public чтобы слот мог работать с моделью, это норм практика?
Или надо как-то через геттер доставать, но я не представляю как потом этот объект передавать в слот.
462 1708311
>>708288
Нихуя не понял, что ты хочешь сделать.
Если у тебя есть окошко с таблицей, то храни там указатель на свою модель и устанавливай её в таблицу. Если хочешь через диалог вводить данные, то в своём обработчике нажатия на кнопку открытия диалога просто его запускай, а по завершению спрашивай в него данные, которые пользователь ввёл и заноси их в модель - если правильно напишешь методы, то таблица автоматом обновится
463 1708316
>>708311
В конструкторе виджета с таблицей у меня вот так создается модель:
QTableView "view = new QTableView(this);
QSqlRelationalTableModel "model = new QSqlRelationalTableModel(this);
То есть в хедере я не указывать, что у меня в классе объекты этих классов есть, поэтому слот не может к ним обращаться.

>ошибка: 'model' was not declared in this scope


model->insertRows(0, 1);
Ну вот если я укажу модель в хедере, то слот должен получить доступ к ней, верно?
1420760494903.jpg43 Кб, 640x640
464 1708329
>>708316
Все, я понял, там и private будет доступно в слоте, это же метод класса. Просто в конструкторе область видимости ограничена фигурными скобками как и в любой другой функции.
Добавилась запись.
465 1708394
Бля еле пробился обратно в тред. Хром перенаправляет на какой-то несуществующий архив.

>>707638
buffеrstrеam/basic_buffеrbuf

На buffеrstrеam мне пох, это просто удобная обертка.
Мне нужно спиздить минимум из basic_buffеrbuf.
Он наследует от std::basic_strеambuf, то есть базовая идея та же самая - передать туда указатель на char* и его длину и в конструкторе он вызывает sеtg, который устанавливает указатели на начало - еback() (что за мудацкое название для начала буфера!), текущий - gptr() и хвост - еgptr().

А потом создать istream и в конструкторе ему подсунуть этот хитрый буфер унаследованный от std::basic_strеambuf .

Бустовый basic_buffеrbuf оверрайдит несколько виртуальных методов из basic_strеambuf которые по дефолту возвращают ошибку, и если они дергаются, то нужно их оверрайдить в своем классе. Если из std::istrеam'a просто тупо прочесть один раз, то ничего переопределять не надо и sеtg достаточно. Если же либа по нему елозеет, нужно оверрайдить sееkoff, что в общем тривиально кажется, если нет подводных.
466 1708411
>>708316

>SqlRelational


Оно тебе точно нужно?
467 1708440
>>708211
Найс матчасть на матан подменил. Матчасть - это нарицательное для всего концептуального. Я говорю не про матан, и даже не про анализ алгоритмов, а про умение мыслить, как погромист. Можно сказать, про архитектуру, но опять же не дрочить умные практики, а а органично расти в этом плане путем написания своих велосипедов. И велосипеды надо писать на языке, который охунен сам по себе, а не который на рыночке на слуху. Так больше напишешь, меньше напрокрастинируешь, вот о чем речь.
468 1708447
>>708394
Смотрю на код в бусте seekoff (off) который двигает указатель.
gptr() это текущая позиция, eback() - голова, egptr() - хвост.

Нафига вот так изъебываться:

n = this->egptr() - this->eback();
this->setg(this->eback(), this->eback() + off, this->eback() + n);

зачем вычислять n, как разницу между хвостом и головой и потом в setg снова прибавлять его к голове, ведь получим тот же резултат this->egptr() - this->eback() + this->eback(), пиздец. Тем более голова и хвост фиксируются один раз и больше не меняются в принципе.

По-моему можно прсто
this->setg(this->eback(), this->eback() + off, this->egptr());
469 1708466
>>708447

>this->setg(this->eback(), this->eback() + off, this->egptr());


А this-> можно выкинуть?
470 1708468
>>708411
Ну у меня две таблицы, связь через внешний ключ, там вместо Id отображается нормальное название.
И я кстати из-за этого не знаю, можно ли добавлять в этот столбец строку или только id(int), ведь этот столбец интовый в самой бд.

Кстати вот так можно удалить запись?
model->removeRow(view->rowAt() );
model->submitAll();
471 1708488
>>708466
Да. Они так вызывают методы, которые в базовом классе определены. ХЗ зачем, может чисто для визуального эффекта. Кажется разные стайл копы в С++ и C# по-разному к this относятся, одни орут чтобы убрать, другие наоборот его хотят. Хуйня это все.
472 1708506
Двач, мне ошибку при дебаге в Qt Creator выбрасывает, как мне узнать что это делает? Подскажите плиз.
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::erase: __pos (which is 18446744073709551615) > this->size() (which is 2)
473 1708515
Вот еще секрет Qt о котором хуево написано:

class MyClass : QObject {
...
signals:
void someChanged();
}

void MyClass::dispatchEvent() {
...
emit someChanged(); //тригерит событие
}

Потом в QML и в QWidgets вот так вот написаное это самое событие имеет вид onSomeChanges почему для чего - хуй знает, что бы путались больше и искали почему не работает.
474 1708518
>>708506
Вышел за пределы своей строки?
>>708515
Это стандартные сигналы?
475 1708526
>>708518
Как понять стандартные? любой метод в сигналы добавляешь, эмитишь из любого места внутри методов класса, в кьюмеэле и в виджетах у тебя событие вылитает через метод с приставкой on+заглавная первая буква
476 1708538
>>708526
Я не заметил on, зато заметил последнюю букву разную, подумал что в разных местах метод по-разному назван.
Кстати для чего QML и QtQuick используются?
Screen Shot 2020-05-30 at 9.04.20 PM.png211 Кб, 1234x952
477 1708543
Не могу понять в чем проблема(пикрил). Макрос же судя по подсказке правильно раскрывается, где оно там еще скобку хочет?
Файл:
https://github.com/OpenXRay/xray-16/blob/a1da0aa884a32901503ec7a395672741c81387ee/Externals/cximage/ximage.h#L721
478 1708620
>>708538

>Кстати для чего QML и QtQuick используются?


Это как XAML, только не через жопу. Декларативно реактивный язык описания интерфейсов. Грубо говоря у тебя приложение разбивается на бек на плюсах и фронт на QML и жопаскрипте
479 1708625
>>708620
Т.е. в твоём бы случае ты бы сделал на крестах поставщик данных, а потом супер быстро накидал интерфейс со всеми финтифлюшками на кюмеэл.
480 1708639
>>708466
>>708488
Там скорее всего куча dependent кода, посему писать без this - это code smell
481 1708642
>>708468
Ты можешь вообще что угодно показывать. В бд будет интовый ключ, а твой метод data() для столбца с этим ключом будет возвращать анимешные картинки
482 1708644
>>708506
Очевидно, что ты отнял от uint(0)
483 1708670
>>708642
Не подскажешь метод, который возвращает текущую выделенную строку в моей таблице, чтобы я кнопкой удалил? Что-то могу найти в документации, там какой-то еще новый класс, связанный с индексами, просто не получится получить номер что ли.
model->removeRow(view->???());
model->submitAll();
484 1708676
>>708670
SelectionModel поищи
485 1708683
486 1708685
Запилил сейчас, чтобы шизик убирающий тег не успел это сделать раньше
487 1708699
>>708676
QModelIndexList selection = view->selectionModel()->selectedRows(0);
if (!selection.empty()) {
QModelIndex idIndex = selection.at(0);
int del_id = idIndex.data().toInt();
model->removeRow(del_id);
model->submitAll();
Так примерно принято делать?
488 1708703
>>708699
Чел, я не ебу. Лучше загугли, посмотри на примеры всякие. Можешь взять qbittorrent как образец хорошего кутишного кода
489 1708720
>>708699
Я давно делал, но ты там вроде должен слать сигналы о начале и конце модификации, чтобы вью их отобразил.
490 1708726
>>708703
Спасибо за совет, действительно посмотрел в sqlbrowser'е их как они удаляют, вроде работает и у меня вот так:
QModelIndexList selection = view->selectionModel()->selectedIndexes();
if (!selection.empty()) {
model->removeRow(selection.at(0).row());
model->submitAll();
model->select();
}
Еще setselectionbehavior задал для вью, не знаю, влияет ли это. Программирование вслепую.
>>708720
Сигналы, насколько я понял, нужны для взаимодействия разных виджетов, а у меня и вью и таблица и кнопка все находятся в одном классе наследованном от qwidget.
491 1708756
>>708726
Сигналы нужны для общения кюобъектов. Твои вью, кнопка и тд - разные кюобъекты с одним родителем. Виджеты - это частный случай кюобъектов.
492 1708768
>>708726

> Еще setselectionbehavior задал для вью, не знаю, влияет ли это.


Из названия очевидно, что это влияет на вид выделения - ячейка/строка целиком/етц

> Программирование вслепую.


Не программируй так, открой лучше кутишную документацию и по любому поводу туда заглядывай.
493 1708772
>>708726

> Сигналы, насколько я понял, нужны для взаимодействия разных виджетов


Не совсем. Если пишешь свою модель, то нужно изнутри посылать сигналы о разных своих действиях. Тот же removeRow. В твоей модели уже это всё написано за тебя, но по идее ты должен наследоваться от абстрактной модели и переопределить этот метод. Внутри посылаешь сигнал, что собираешься что-то удалить, потом удаляешь из своего списка ячеек/базы/файла/етц, потом посылаешь сигнал о том, что закончил удалять.
494 1708773
>>708772
Уверен процентов на 90, что при вызове view->setModel(...) эта самая view подключается ко всем этим сигналам - rowsAboutToBeRemoved(), layoutChanged() и прочие
495 1708841
>>708538
Что бы нажатие кнопок, перемещение элементов, списки и вот это вот все в плюсах не писать как это обычно у всех делается. Одна из главных фичь это кастомизация как в вебе - кнопку можно там картинкой нарисовать или тупо текстом, стиль менять динамически, хуверы-хуюверы драгндропы вот это вот все. Относительно хтмл+жс+цсс гораздо проще устроена свистопляска со слоями элементов и отступами от краев синтаксис более приятный чем хмл бяка, но в остальном к сожалению во всем уступает.
497 1708988
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 3 октября 2020 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски