Вместо шапки:• https://github.com/sosachbot/cppthreadhat/wikiОтветы на вопросы: • http://en.cppreference.com/w/ • http://www.cplusplus.com/reference/Прошлый тонет тут >>1482318 (OP)
Почему все до сих пор пишут классы в С++, разделяя хэдер и реализацию? Это все из-за наследия сишки или имеет какой-то сакральный древний смысл.
>>1492424type* - это же именно отдельный тип данных, следовательно, лучше относить его к первому варику.
Что означает комбинация int &Arr? Я понимаю что это такое по отдельности и частично вместе, но как работает &?
Стоит юзать вектор или можно обойтись в принципе пацанским выделением динамического массива в проде? Какие подводные у обоих вариантов.
>>1492473Я понимаю как примерно работают ссылки и указатели по отдельности, я даже понимаю что значит *a = &b, но вот эту штуку я вижу впервые и не могу нагуглить что это.
>>1492475Ссылка на указатель?Это та же ссылка, только на указатель.вроде как, впервые вижу чтоб вобще кто то так писал
>>1492482>Ссылка на указатель?Может это как ссылка от указателя на целочисленный тип? То есть это может пригодится при работе с массивом (не ебу как, но может).
Какого хера автор говорит, что пользователь не сможет НАПРЯМУЮ работать с этими переменными? Какая разница, сделано это через геттеры и сеттеры или просто через публичную переменную, все равно доступ такой же. Я, блять, не понимаю нахуя это тут. В джаве это понятно зачем городить, но в кресты ЗОЧЕМ.
>>1492516Когда ты пишешь один, то наверное незачем. А если несколько человек, то у каждого своя задача и кто то может написать одну часть программы, а другой использовать ее не вникая в то как оно работает, и взаомодействовать с ней с помощью геттеров и сеттеров.
>>1492523Ну, так, если он получает значение просто публичной переменной, то он тоже особо не будет вникать.
>>1492516Публичные переменные не нужны. А ещё может понадобиться потокобезопасность, тогда с методами можно сделать так, чтобы было последовательное выполнение при одновременных вызовах.
>>1492516Тут это нахуй не нужно. Видимо имеется в виду что в нормальном классе будут проверки дат на валидность.
>>1492525Возможно, что прежде чем записать значение в переменную нужно это значение обработать. Например проверить чтобы значение лежало в определенном диапазоне, а если нет, то привести значение в необходимый вид.
>>1492530Вот, сука, нигде такой хуйни нет, но в с++ есть.Я имею ввиду ТАКАЯ инкапсуляция посредством хэдеров.
>>1492444А что с этим не так? Поясните, я правда не знаю, плохо знаком с другими языками. Как по другому инклюды делать? Тебе же не нужна вся реализация, она в библиотеках, тебе нужен только интерфейс.
>>1492444>Это все из-за наследия сишкиYes.>имеет какой-то сакральный древний смыслTut tozhe yes. Правда не древний нихуя.Во-первых, потому что в плюсах всё ещё нет модулей (выйдут в 20 версии, уже утверждены), и хэдэры подставляются как есть — текстом. Каждый #include — это просто текстовая подставка, которую надо парсить по новой. В более новых языках есть модули и код всегда парсится только 1 раз.Во-вторых, а где ты реализацию с интерфейсом-то в куче видел? В го и скриптовых яязыках?
>>1492553>Во-вторых, а где ты реализацию с интерфейсом-то в куче видел? Разве в джаве не так? Ты же не делаешь джва файла на класс.
>>1492442 (OP)Здравствуйте аноны. Вопрос по с, но напишу сюда, т.к. предполагаю, что С полумертв, а большие братки не откажут. Вопрос достаточно нубский.Хочу вместе с хедером некого модуля, подключать и его глобальные переменные.(я опустил #ifndef, они есть)http://ideone.com/3YIgqaЕстественно, я получаю залупу за воротник, т.к. объявление переменной происходит 2 раза. И в module.c и в main.c и #ifndef тут никак не спасет.У меня нет вариантов использовать Get\Set функции (C89 нет inline) а обращение будет часто. как уже догадались ебебедедВ итоге решил объявлять переменные в Module.с, и отдельно иметь хедер модуля объявлениями функций и отдельный с extern объявлением переменных.Инклудить все в Module.h и его уже подключать в программе.В то же время в Module.c только ModuleFunc.hЛучше примером.http://ideone.com/10EkTPВопрос в том, что правильный ли это вариант и единственный ли? Или я где-то туплю.Мне не нравиться, что у меня кол-во файлов с 2х до 4х возрасло и если я захочу сохранять логичную и последовательную структуру - возрастет еще. Не хочу иметь ModuleInternal.h какой, в котором все остальное без разбору сваленоНа форумах все предлагают отдельно объявлять extern там где требуется и это звучит как залупа.По моему я какой то хуйней заморачиваюсь, но для меня важно.
>>1492658Хедер с интерфейсом или хотябы с функцией, возвращающей некий указатель, а имплеменатцию и сами глобальные переменные внутрь некого си файла.Пользовался этим в С++, когда на С++14 сидели, экстерноговно не кушай
Помгите, прошу. Какие настройки вам показать? Что не так? Почему все красное? Соре за paint. Он какого то хуя заис тут
>>1492699Нету у меня возможности использовать функцию - нет inline по стандарту, а компилятор дурной очень, не хрена не факт, что догадается разворачивать геттер. И нет дизасм не хочу не буду смотреть Чем extern так плохи? >>1492702Вот заодно анону помогу.То, что в солюшен эксплорере это файлы, которые будут собираться в объектные.Хидеры будут игнорироваться, ты можешь их туда пихать для удобства, но программе они не будут известны.А что бы инклудить хидеры, ты должен указать где их искать, это делается обычноНастройки проекта -> Include Directories или что то такое, там название и место в MVS из года в год меняется.
>>1492704Хотя мне кажется что эта ошибка не имеет ничего общего с той. Короче ебаная вижуал студия. Я просто обновил ее
>>1492703>нет inline по стандартутебе не нужно инлине, у тебя обычная функция самая, определение которой в трансляционном юните. Что-то в духе:--------------zalupa.hint get_var();int set_var(int val);--------------zalupa.cppstatic int g_var = 0;int get_var() { return g_var;}void set_var(int new_var) { g_var = new_var;}--------------За синтаксис не ручаюсь
>>1492703>нет inline по стандартуInline не инлайнит функции. Это ключевое слово позволяет делать так, чтобы компилятор не ругался на multiple declarations одной и той же функции при инклудинге хедера, когда эта функция описана в самом хедере.Сам инлайн только на усмотрение компилятора. Более того, даже аттрибуты типа _____forceinline_____ уже давно игнорятся компиляторами, потому что их лепят где попало.
>>1492658>Вопрос в том, что правильный ли это вариант и единственный ли? Или я где-то туплю.За именование модулей с большой буквы оторву яйца, виндоебок проклятый. Зачем тебе 2 файла не понятно. Достаточно хедера с экстернами. Но вообще это в корне неверно, но ты хочешь так.//module.h extern int module_global; void ModuleInit(void);//Module.c #include ModuleFunc.h int module_global; void ModuleInit(void){ module_global = 1;//какой нахуй int здесь, поехавший} //Main.c #include module.h void main (void){ ModuleInit(); module_global++; }
А правильно так.//module.htypedef int error;typedef struct {int ciferka;} module_context;void module_create(module_context@@ yoba);//module.cERROR module_create(module_context@@ yoba) {*yoba = malloc(sizeof(module_context));yoba->ciferka = 1;}//main.cint main() {module context yoba;if (!module_create(yoba)) {fprintf(stderr, "Беда, капитан");exit(-1);};}Либо - в следующем посте
А за такое тебя сразу возьмут мидлом.//module.htypedef int ERROR;struct module_context_tag;typedef struct module_context_tag module_context;//вроде нигде не проебался, ненавижу сишкуERROR module_create(module_context@@ yoba);//module.c//ииинкапсуляцияstruct module_context {int ciferka;}';ERROR module_create(module_context@@ yoba) {*yoba = malloc(sizeof(module_context));yoba->ciferka = 1;return 1;//забыл в прошлый раз}//main.cint main() {module_context yoba;if (!module_create(yoba)) {fprintf(stderr, "Беда, капитан");exit(-1);};}
>>1492744Я честно говоря запутался. За что вообще отвечает msvc. Еще странно, что все работало на 19 версии, но после какого то обновления сломалось. Поможет ли, если я снесу все и заново установлю?
>>1492706Ты обновился с 2017 на 2019? Для 2019 нет предсобранного msvc компилятора в Qt. Ставь 2017 build tools через установщик/настройщик студии, тогда будет валидно.
Там типа 141 build tools тебе надо. Вместо 142. Но тогда и проект должен быть для этой версии, старой, не апгрейдь.
>>1492755Вообще нужно приучить себя не обновлять виндовые приложения сразу. У меня однажды сама винда полетела после своего же официального обновления
>>1492750я бы на твоем месте вообще не пользовался студийным тулчейном в твом случае. Накати mingw через QT инсталлер, и пользуйся им.Ну или полноценно девелопи в студии с qt tools.
>>1492717> Это ключевое слово позволяет делать так, чтобы компилятор не ругался на multiple declarations одной и той же функции при инклудинге хедера, когда эта функция описана в самом хедере.Интересно надо будет почитать, всегда считал что как рекомендация к развертке работает.>>1492712Я к тому и пишу, есть шанс что конкретно мой тупой компилятор ее не развернет. А мне очень желательно, что бы просто была изменена ячейка памяти, без джампов.И сейчас все таки посмотрел дизасм - хуй, не разворачиваются геттеры из одной команды.>>1492719>>1492725>mallocOut of memory лолЭто вся хуйня в контексте байтоебства, я в начальном посте написал, мне нужно получить прямое обращение к ячейки памяти, на выходе.Я люблю в хедере описывать дефайны и тайпдефы, после чего инклудить их в *.с и его же инклудить в проект.Это разве нихуя не правильный подход?>>1492725Вот конкретно тут, у тебя тайпдеф в хедере, но этот же тип используется в .с файле, куда хедер не заинклужен.Оно на хуй не должно послать разве?>//какой нахуй int здесь, поехавшийОпечатка же
>>1492761В догонку, мне не нужна переменная в main, она мне нужна в других модулях, которые будут на основе этого.И очень удобно иметь один ебучий хедер, который ты пихаешь куда надо.Макароны? Безусловно, но лучше чем видимые везде, тут хотя бы видишь что используется.
>>1492761>Я люблю в хедере описывать дефайны и тайпдефы, после чего инклудить их в *.с и его же инклудить в проект.>Это разве нихуя не правильный подход?Нормальный подход>Вот конкретно тут, у тебя тайпдеф в хедере, но этот же тип используется в .с файле, куда хедер не заинклужен.>Оно на хуй не должно послать разве?У меня дохуя опечаток, это одна из них>>1492763>И очень удобно иметь один ебучий хедер, который ты пихаешь куда надо.В хедере extern'ы, то есть декларейшен, в соответствующем модуле - дефинишены без экстернов. И все будет работать. Так ине понял зачем тебе делить хедер на два.>И очень удобно иметь один ебучий хедер, который ты пихаешь куда надо.Пока не окажется, что ты у тебя два шаговых двигателя вместо одного, а код весь жестко забит на глобальные переменные, и вот тут и начинаются макароны.Впрочем, у меня задача была показать тебе разные способы, а не выбирать их за тебя.
>>1492766>была показать тебе разные способыЯ учел на будушее, спасибо.>>1492766>В хедере extern'ы, то есть декларейшен, в соответствующем модуле - дефинишены без экстернов. И все будет работать. Так ине понял зачем тебе делить хедер на два.Но если h инклудится в c, где объявление переменной, получается.extern int var;int var;И тебя посылают на хер. Разве не так?>Пока не окажется, что ты у тебя два шаговых двигателя вместо одного, а код весь жестко забит на глобальные переменные,Это хороший пример, но оно слишком абстрактный, от ситуации подобное можно и через создание экземпляров и через макароны и через коллекцию.Но это уже оффтоп.
>>1492773>И тебя посылают на хер. Разве не так?Нет http://ideone.com/EUF2w6>Это хороший пример, но оно слишком абстрактный, от ситуации подобное можно и через создание экземпляров и через макароны и через коллекцию.Почему, все конкретно.Глобальные переменные не используем. Вместо них создаем контекст модуля и таскаем его. Желательно этот контекст спрятать в .c файле, чтобы наружу торчал только указатель. Это best practices сишного кода.Исключения следует делать только в случае совсем хардкорного байтоебства, и то, не факт. Потому что вместо malloc можно и статически контексты модуля повыделять, и тогда оверхеда не будет вообще, зато при желании ты сможешь делать несколько экземпляров модуля, что нужно намного чаще, чем ты думаешь.С другой стороны какой-нибудь Quake написан примерно в твоем стиле, и ничего.
>>1492776>НетИ в правду. Вот тебе и домыслы... тогда все понятно.В этом месте вопрос и решается.> все конкретно.Ну смотри если у тебя устройство с одной лампочкой, модулем связи и 2мя шаговиками, под которые надо либу еще писать.Легче попросту замакаронить, т.к. объем мелки и как не старайся, сделать криво и непонятно - сложно.Или >совсем хардкорного байтоебстваЧто собственно и мой случай - слабое устройство, в которое напихали аки в японское метро и еще хотят.>статически контекстыОстальное так и сделано правда через жопу и все один хер жестко прибито, просто конкретно этот модуль - удобнее сделать так, т.к. она один из немногих нужен везде и часто, поэтому и вопрос по скорости.
>>1492540Компилировать все ссылающиеся на класс файлы vs компилировать только .cpp-файл.Хм, что же выбрать?
https://www.boost.org/doc/libs/1_71_0/doc/html/boost_asio/overview/core/basics.htmlЯ не понимаю, run разблокировывается сразу после асинхронного вызова handler или всё-таки дожидается выполнения handler и только потом разблокировывается?
>>1492442 (OP)У меня есть лист и два итератора. Мне надо поменять местами значения на которые они указывают ( в листе), но если использовать swap, то итераторы инвалидируются. Надо это выполнить без инвалидации за О(1). Говорят, можно использовать как-то splice, но как?
>>1492755>>1492753Нахуя вообще пользоваться кутишным расширением? Сколько лет уже программирую, никто ни разу не сказал "вот это бля годное расширение, заебца". Почему нельзя просто™ скачать собранные бинарники и подключить их к проекту? От 17 студии подойдут к 19.
>>1492814>то итераторы инвалидируются.С чего бы? Ты не итераторы меняешь, а значения, на которые они указывают.
>>1492810А если вместо передачи handler у меня yield[ec]? Т.е. переключение на корутину. Сначала выполнится корутина, а потом run разблокируется? По тестам вроде так, я ставил задержки внутри корутины и смотрел по логам в консоль, что вызовется первым: печать после задержки внутри корутины или печать после вызова run. Типаboost::spawn(io_context, lambda); // внутри лямбды вызывается sleep и logsome_async_op(..., yield[ec]);io_context.run();log(...);
>>1492761>Я люблю в хедере описывать дефайны и тайпдефы, после чего инклудить их в .сА я люблю в хедере описывать дефайны и тайпдефы, после чего инклудить их в .с. Каждый день я хожу по проекту с хедером и собераю в него все дефайны которые вижу. На два полных файла целый день уходит. Зато, когда после тяжёлого дня я открываю main.c... ммм и сваливаю в нее свое сокровище. И запускаю компилятор представляя, что меня поглотил единый организм дефайны. Мне вообще кажется, что дефайны, умеют думать, у них есть свои семьи, города, чувства, не меняйте их на шаблоны, лучше приютите у себя, говорите с ними, ласкайте их…. А вчера в ванной, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в дефайны, рыбы, водоросли, медузы, все из дефайнов и тайпдефов, даже небо, даже Аллах!.
>>1492917> boost::spawn(io_context, lambda); // внутри лямбды вызывается sleep и logперед sleep и log внутри лямбды есть yield, разумеется
Насколько хороша идея сделать в библиотеке отдельный хэдер с дефайнами условий компиляции, где, например, можно будет отключить проверки аргументов и так далее.
Хочу начать писать на с++, решил сделать 1й проект веб-апликейшен логер моего рабочего времени.Погуглил как делать серваки, чаще всего предлагают писать свои сокеты/хендлеры с нуля.Погуглил "готовые решения", нашел это https://github.com/etr/libhttpserver#introductionТеперь сомневаюсь в своей затее, веб-сервера не особо популярны на плюсах?Может кто-нибудь сможет подсказать как мне лучше начать в этом направлении писать?взять писать без задней мысли прошу не советовать
Стоит ли создавать свои собственные классы ошибок или же просто потерпеть и поиспользовать std::runtime_error?
>>1493080Если в кьют умеешь то бери их сокеты, повторяй примеры из документации и всё. Если хттп сервак надо - на гитхабе пару либ готовых, qhttpserver например, эхо сервер в строчек 30. Но вообще да, серваки на плюсах не очень популярны судя по всему.
>>1492444> Почему все до сих пор пишут классы в С++, разделяя хэдер и реализацию? Это удобнее и понятнее.
Надо считать символ char. std::cin >> c; Как проверить, чтобы был введен именно символстрочной, заглавный цифра, а не строка или несколько цифр?
>>1493314Да тоже пизди всякие модные слова без перерыва, и все будут охуевать и думать "как стать таким же умным, как ты"
>>1493314Прсрись на форумах пару лет, почитай срачи. Будешь рожать подобное борщехлебное дерьмо тоннами.
>>1493314>запретить стрелять себе в ногу>запретитьИдите на хуй со своими запретами, авторитарные макаки.
>>1493282Серьезно, помогите. Попробоваль сразу после ввода вставить проверку if(std::cin.failbit) так она при любом вводе срабатывает .
>>1493365Хотя тут понял, где обосрался. Но все же как выдавать ошибку, если на ввод подается больше 1 символа не ясно.
>>1493282Если у тебя есть conio.h, то можно getch() - она в принципе не даст больше одного символа ввести.>строчной, заглавный цифраisalnum()
В каких конкретных случаях создание ссылки продлевает жизнь объекта? Вот это работает например, висящей ссылки не будет. Сказать, что я охуел — ничего не сказать.const auto &ref = create_some_rvalue();
>>1493549Дружок-пирожок, клуб безработных педиков парой тредов выше. Я трудоустроенный высокотестостероновый натурал.
>>1493546всегда, до конца скоупа.{ // все ок const int& var1 = something(); something2(var1)}const int& func(){ const int& var2 = something(); return var2; // висяк}
Пацаны, что такого сделали в msvc, что теперь не видно type alias'ы из базового класса? Ну то есть[code]template <class T>struct MyBase{using my_t = T;}struct MyChild : MyBase<int>{// приходится писать такusing my_t = typename MyBase<int>::my_t;}[/code]Раньше в vs 2017 в наследниках можно было не писать эту простыню.Алсо, почему теперь нельзя написать [code]using T = T[/code]?
>>1493600Так, собственно, конкретизировать и нечего по сути. Был древний код как в примерах, при попытке собрать новой студией с /std:c++17 вылазят ошибки номер хуй C2386 во втором случае и что-то вроде unknown identifier в первом
Нахуя хвастаться скоростью, если всё равно все пользуются умными указателями а не сырыми? Нахуя вызывать деструктор по типу указателя, если ясно что память помечёт? Нахуя вводить лямбды если с безопасностью пиздец? Что за уёбище получилось в итоге? И почему им до сих пор пользуются?
>>1493611>пукНикто и не ожидал, что у зашореных цппшников найдутся оправдания уёбищности этого говна. Но ты хотя бы мог отправить меня в раст-тред. Из этого треда _всех_ нужно отправлять в раст-тред. А ещё лучше попросить Абу сделать редирект
Как передавать нажатия по рабочему столу в реальном времени? Написал вот такой кусок кода, по задумке это что-то вроде рабочего стола, только в отдельном окне, то есть я нажимаю на папку - она открывается и так далее. Как я понимаю проблема в том, что в виндовс не может быть активно более 1 окна, есть какие-то способы обхода или реализация в целом хуйня, куда тогда стоит копать?
>>1493610Я всем говорю, что инженером работаю. Тянки боятся, память течёт. Если бы на джс писал, то было бы стыдно смотреть в зеркало по утрам.
>>1493622>Если бы на джс писал, то было бы стыдно смотреть в зеркало по утрам.корчил бы в зеркало ахегао и складывал бы руки в кошачьи лапки
>>1493610>Нахуя хвастаться скоростью, если всё равно все пользуются умными указателями а не сырымиВ огороде бузина, а в киеве дядька. Если ты подразумевал, что умные указатели медленные, то это не так.>Нахуя вызывать деструктор по типу указателя, если ясно что память помечётЧто>Нахуя вводить лямбды если с безопасностью пиздецХотя бы чтобы делать parallel_for без плясок с бубном>Что за уёбище получилось в итогеСказал растоебок, у которого язык уже сравним по уебщиности, хотя ему 10 лет всего.>>1493616В оппосте есть ссылка "вместо шапки". Зайти туда. Найди параграф "памятка ньюфагу". Прочитай 5-й пункт.
>>1493639>Сказал растоебокС чего ты взял? Я на с++ уже 5 лет. До этого на Сишке и ObjC. И что бы вы думали? Несмотря на смартпойнтеры позавчера поймал сигфолт. Дело в том что с++ это механизм из говна, смазанный поносом. И если есть возможность пресекать хотя бы часть фейлов на этапе компиляции, то это просто космические технологии по сравнению с с++
>>1493698> Несмотря на смартпойнтеры позавчера поймал сигфолт> с++ это механизм из говнаМеханизм из говна тут не c++
Есть метод(см. первую пикчу). У него по дефолту значение параметра> std::function<void(GLFWwindow✡, int, int)>равняется функции со второго пика. Также внутри первого метода есть вызов функции glfwSetFramebufferSizeCallback, которая принимает в качестве аргумента указатель на функцию вида > void(GLFWwindow✡, int, int) То есть у меня std::function на нее ориентированНо почему-то, когда я передаю функции glfwSetFramebufferSizeCallback ссылку на std::function ее вида, то все нормально. Как такое вышло?
Может кто посоветовать хороших книг(желательно на русском) по c++17 или сайтов с задачками, а то основы изучены а задач для практики пока немного.
Встретил задачку send + more = money, решил написать программу решающую это говно. Но не получается. Точнее выходит неэффективное говно, которое тратит на решение больше 2 минут. Вот оно https://ideone.com/QCroGiКак сделать заебись? Чувствую себя умственно отсталым.
>>1494052Кек, решил в уме минут за 6, похоже брутфорс эффективнее :)В алгоритм не вникал, но можешь попробовать вместо map использовать std::array<int, 128>
>>1494052>>1494107Брутфорсы разные бывают. Для ускорения перебора нужно как можно раньше понять, что мы идём не туда и игнорировать эту ветку.Например в этой задаче можно поддерживать множество "занятых" цифр, а также идти с конца и смотреть подходящие варианты по последней цифре.http://ideone.com/TocGUaЗакодил вашу хуйню за час где-то. В школе занимался олимпиадами, но за прошедшие 8-10 лет деградировал до уровня двачей
Пытаюсь вкатится в кресты. Хочу написать функцию, которая читает любую переменную и возвращает ее значение. Логика подсказывает, что я могу написать скажем 3 функции read для инта, флоата, и строки. Но мне кажется есть способ проще. Вот с выводом в консоль я решил вопрос такtemplate <typename T>void print(T v){ cout <<v<<endl;}Мне казалось что с чтением тоже можноtemplate <typename T>T read(){ T s; cin<<s; return s;} Но тут то я и соснул хуй когда дальше пытаюсь сделатьstring s = read();кресты я изучаю где то 20 минут, до этого писал на питоне и похпе, поэтому вопросы наверное максимально глупые
>>1494246> cin<<s;лолПросто во втором случае конпелятор не может вычислить тип Т.Пиши s = read<string>();
>>1494256Ну я же говорю, только 20 минут как начал. Почему то в Википедии такие простые штуки при работе с шаблонами не объясняются, но скорее всего я просто в глаза ебусь привыкнув к пхп.Cin устарел, да?
>>1494248расскажи нам>>1494246Поток ввода никак не может понять, какая там переменная, максимум - вытащить циферку, и то, если ты ему скажешь, что там точно циферка.Читай в строку, и дальше парси сам, вариантов немного
>>1494258Просто взять и писать на плюсах нельзя, возьми почитай Прату, сделай примеры, а потом вернись к своей хуйне. Это тебе не питон, тут даже хеллоуворд может не компилироваться.
>>1494287Я задал вопрос и получил на него ответ, но спасибо за жалкую попытку самоутверждения, было забавно
>>1494276>>1494259Я вот подумал, что вам будет не очень интересно, поскольку я школьник, но сегодня писал олимпиаду и почувствовал разницу в скорости написания кода на питоне и плюсах. Мне также показалось что плюсы тяжелее читать. Как же обидно когда алгоритм в голове составил, а записать нормалтно не можешь
>>1494294Нихуя себе откровения, на языке тс динамической типизацией и высоком уровне абстракции из коробки писать проще! Охвау
>>1494298А как научиться переносить мысли из головы в код как можно точнее? Где задачи на эту тему взять? Потому что я такую хуйню написал что пиздец
>>1492800это же какая-то ебонутость сиплюсов. можно же (не пердоля ничего остальное даже) препроцесором генерировать отдельный файл имплементации для методов, которые не нужно инлайнить, и конпелировать всё по-нормальному, а в процессе написания держать все в хедерах, чтобы не ебать мозги несколькими файлами, иметь комменты для функций рядом с кодом, не ебать себя повторением хедеров функций в двух местах, не ебать себя переключением между хедером и имплементацией. все нормальные текстовые редакторы поддерживают сворачивание кода, поэтому "загленул в хедер сразу все увидел" не аргумент.ухожу на раст.
>>1494339>он думает, что я человек своего слова и действительно уйду на растПриятно видеть, что кто-то еще не потерял веру в людей.
>>1494407Во многих языках есть модули. Не нужно отдельно писать интерфейс и реализацию, достаточно скомпилировать модуль, а затем его импортировать в своей программе. Ничего никуда не инклудится, всё компилится по отдельности. Хорошо это или плохо, думай сам.
>>1493597>Алсо, почему теперь нельзя написать [code]using T = T[/code]? Внутри MyBase? Потому что https://timsong-cpp.github.io/cppwp/n4659/temp.local#6:> A template-parameter shall not be redeclared within its scope (including nested scopes).
>>1493546>В каких конкретных случаях создание ссылки продлевает жизнь объекта?В ньюфаг-тред, шагом марш.
>>1494445Спасибо. Кажется, нашёл статью, где они это "починили"https://blogs.msdn.microsoft.com/vcblog/2017/09/11/two-phase-name-lookup-support-comes-to-msvc/
Анончики, помощь нужна. Есть у меня двусвязный список, в виде класса. Надо его отфильтровать и вернуть новый список, не трогая старый. Можете описать алгоритм, как это сделать? Я совсем извращаться начал, написал метод, который выдает массив из элементов списка, прошедших фильтрацию и в другой функции вставляю элементы массива в новый список и возвращаю его. В итоге, исходный список почему-то заменяется новым.
Я не понимаю, объясните.Создаю файл заголовка и в нем описываю класс. В классе есть один метод.Создаю файл с кодом, в нем описываю метод.Все ок.Создаю класс. Обращаюсь к методу. Вижу ошибку "неопределенная ссылка к 'методнейм' " (undefined reference to 'classname::methodname')Переношу определение метода в файл заголовка - все работает.Что за хуйня?
>>1494918Лаба что ли? Идешь циклом по списку и делаешь push_back в новый список элементам, удовлетворяющим условию.Если не лаба, то чем тебя стл не устравивает.
Как реализовать уведомления об обновлениях в чате? Клиент по какому-то каналу должен раз в n [промежуток времени] опрашивать сервер о новых обновлениях? Нельзя какое-то подобие сигналов в Qt реализовать?
>>1495016Куда копировать? Список - это же не массив, там данные рандомно в памяти расположены и связаны указателями.
>>1495049Да я уже загуглил. Вопрос еще один: http сервер не хранит состояние, мне нужно передать юзеру адрес второго сервера, который будет посылать уведомления об обновах, а юзер будет их с мейн сервера забирать?
>>1495071ну или там не линкуеш её че там еще в плюсах. у кого-нибудь шишка зачешется выебнуться и меня обязательно поправят.
>>1495041Копируешь каждый элемент списка и связываешь их в том же порядке.>КудаВыдели память в куче и туда и копируй, что ты как маленький.
>>1494531>Кажется, нашёл статью, где они это "починили"Там запрет переопределения параметра шаблона в планах на будущее> Here’s a list of what’s left to come in future updates to MSVC in Visual Studio 2017...> ...> 5. Neither redeclaration of template parameters and redefinition of template function arguments as local names are reported as errors.
>>1495292>Посоветуйте книги по WinapiКниги по винапи у нас дома есть.Книги по винапи дома:https://xcb.freedesktop.org/tutorial/
>>1495292Зачем по винапи писать книги? На MSDN и так все расписано с примерами. Если хочешь углубиться в архитектуру оси, то читай Windows Internals 7 часть, 1 книга уже вышла, вторая будет после нового года.
Почему на си++ ещё кто-то пишет, если для всего низкоуровневого используется си, так как его стандартная либа легче и сам язык ближе к ассемблеру, а для крупных коммерческих энтерпрайз проектов удобнее использовать си шарп?
>>1495436Никто на нем не пишет, в этих итт тредах мы просто траллим нюфагов.Если ты не заметил, то все пришедшие с лабами на якобы с++ в разделе реально используют из крестов только ввод/вывод, остальное все - чистейший си.
>>1495436Попробуй что-нибудь большое написать на си. (Или просто разобраться в кодовой базе FFmpeg)Все ФП веруны, что обсирают ООП (и в особенности крестовый недоООП), просто не пробовали что-то большое делать на чисто процедурном языке.Нет-нет, при хорошей архитектуре, не сложно. Суть вот в этом "при".С - ад для архитектора. Плюс ещё сырые указатели. (сегфолт, сегфолт... протечка)Си++ лучше Си в плане выразительности, но ты ещё и не платишь за то, что не используешь. Лучшее из двух миров. На словах.Потом можно сказать, что нахуй С, я возьму C#. А в требованиях проекта - кроссплатформенность + быстрота. И тут уже можно пососать хуйца. (А можно и не пососать. От опыта, наверное зависит.) Плюс, C# - это вендор-лок. Ну или был им до недавнего времени.А потом можно сказать, что мы напишем нагруженные части на С, а сложные на С#. И тогда вся комманда получает тонны ебли. Такой, что дома ебаться уже и не хочется.ИМО, не обоссывайте.
>>1495554еще хуже (я так и не выучил толком си так что думаю что еще хуже)в основномtypedef struct {.....} xyntaтолько линкед лист делал структурой typedef struct node {.....} node
>>1495436Везде, где требуется высокая производительность, используются плюсы. На нем пишут движки браузеров, виртуальные машины и т.д.Инкапсуляция делает код более читабельным, есть шаблоны, которые иногда упрощают жизнь, есть защита от дурака в виде модификаторов доступа, всякие удобные штуки вроде перегрузки операторов, референсы и т.д.>>1495536>просто не пробовали что-то большое делать на чисто процедурном языке.C++ очень часто используют без RTTI, ибо оверхед, это недо-ООП и скорее ближе к процедурному программированию с синтаксическим сахаром в виде инкапсуляции, чем к тру-ООП.
>>1495560Понял. Я имел в виду, прятал (инкапсулировал) ли ты детали реализации структуры в сурс файле, или нет.>>1495565> C++ очень часто используют без RTTI, ибо оверхед, это недо-ООП и скорее ближе к процедурному программированию с синтаксическим сахаром в виде инкапсуляции, чем к тру-ООП.Йеп. Но чистая сишка ещё страшнее, не?И зачем нужет RTTI? Нужно просто сделать хорошую архитектуру, с чёткими интерфейсами и прочим.
>>1495578>И зачем нужет RTTI?Чтобы работали виртуальные методы. Без виртуальных методов нет полиморфизма, а без полиморфизма нет ООП. Без RTTI C++ это процедурный язык.>Но чистая сишка ещё страшнее, не?Да, поэтому C++ и используют.
>>1495599Это был сарказм, btw.V-тэйблы же работают без RTTI? Или я что-то путаю?Имеется в виду вообще весь механизм, или же доступная программисту часть?Если что, всё моё понимание RTTI составлено из вот этой статьи в википедии и опыта работы с самописной динамической идентификацией типов в одной компании.https://ru.wikipedia.org/wiki/Динамическая_идентификация_типа_данных
>>1492442 (OP)Знакомый забашлял бабла в GeekBrains и пошел туда на курсы, в конце там еще и сертификат дают. Насколько хороша эта тема? Профит будет?
>>1495617Конечно будет. Ложное чувство получения знаний и поднятие морального духа. А мог бы просто книжку прочитать
>>1495624Так есть хоть какой-то профит от подобных курсов при трудоустройстве? сам планирую пойти Сертификат роль сыграет?
>>1495628>Так есть хоть какой-то профит от подобных курсов при трудоустройстве?>C++Нет, это скорее минус.
>>1495628Сомневаюсь что это решающую роль сыграет. Как на собеседовании себя покажешь, такой и будет результат, это максимум небольшой плюс будет. Всё-таки это не MIT какой-то, а отчесественная хуйня для выкачивания денег.
>>1495652RTTI это же про typeid и dynamic_cast. Виртуальные таблицы и без них спокойно работают.Мимопроходил
>>1493610использование умных указателей (из стандарта) вообще не влияет на скорость выполнения по сравнению с сырыми, есть небольшие затраты на память и все
>>1493610лямбды в с++ - это просто синтаксический сахарок в языке, в случае когда нужно на один раз передать callable сущьность, те чтобы не писать функторы и обычные функции для одноразового применения
>>1495736Херасе.Я пытаюсь по умолчанию везде пихать юник, а потом мне всё равно приходиться переделывать на шаред.Могу сказать наоборот: в 99% юник не нужен.
>>1495769Постоянная необходимость в Big 5 и вероятность object slicing'а дружно смеются мне тебе в лицо.
>>1494918напиши "свободную" функцию фильтрации которая принимает список который нужно отфильтровать, условия фильтрации, а возвращает новый список, в котором будут отфильтрованные элементы
>>1495743Попробуй дизайнить механизмы владения получше. Или, вообще хотя-бы пытаться думать, что у тебя и чем должно владеть.Пихать всюду шаредпоинтеры, потому-что ты не знаешь, как у тебя что и где - это нихуевый такой антипаттерн и code smell
>>1495743Мда, за километр видно, что у тебя память течет в проекте. В расте твой говнокод даже не скомпилился бы и ты бы рыдал как побитая шлюха над ошибками борроу чекера, размазывая сопли по щекам.>>1495779Сука, до сих пор блевать тянет от rule of five, особенно после раста, где от этой хуйни сознательно отказались и конструкторы простые как слеза младенца.
>>1495796>>1495782Ок. Не то чтобы я был старше джуна и мог бы кому-то всё испортить, но всё равно полезно свой косяк увидеть.
>>1495536кстати, ffmpeg всегда приводят в пример того, что архитектура этого проекта требует ооп-методик (в частности как динамического, так и статического полиморфизма)но он написан на си, и в этом проекте, по сути, возможности ооп эмулируются средствами си
>>1495565>тру-ООПЭто какое такое? То, где все заканчивается срачем на тему "как я выбирал свой любимый паттерн из GoF?"
>>1495617если хочешь учится за деньги (на русском языке) - то 4 курса по с++ на курсере от яндекса оптимальный выбор на данный момент
>>1496479А тебе зачем? Там много такого, что тебе уже не пригодится, потому что уже есть в стандарте. Читай примеры по интересующим библиотекам, типа gil, hana, geometry
const char temp[11] = {'i', 'n', 'p', 'u', 't', char(i + 48), '.', 't', 'x', 't'};std::ifstream input;nput.open(temp);if (!input.is_open()){ std::cout << "error: Could't load \"" << temp << "\"" << std::endl; return 1;}Файл input0.txt лежит вместе с main.cpp и CMakeLists.txt, но якого-то хуя не открывается, IDE CLion, хз почему и как фиксить, хелп
>>1496843при такой инициализации все, что не указано, будет zero initialized, включая, собстно, последний элемент
>>1496853Лучше сделать вебапп на питоне который тягает твою либу на крестах. А так зависит от задачи. Qt самый универсальный вариант, но для венды можно подумать
>>1496873Юниксвей - просто, композабельно, доступно с кучи клиентовДаже архитектура твоей либы будет скорее всего продуманней стандартного button1click
>>1496930Если грамотно использовать шаред (а именно - не тягать счетчик ссылок постоянно), то он почти бесплатный и не хуже юника.А так 90% случаев покрывает банальный std::vector, а еще 9% - другие контейнеры. Не так уж указатели в современном С++ нужны.
>>1494009>я отвечаю за качество продукта>написал крашащуюся хуету – это не я, это язык!! Язык говно просто!
а ну расскажи за умные указатели...Короче, есть умный указатель shared_ptr<Data> data;есть некоторый класс, который должен работать с этим data , он хранит некий указатель mdata. Но при этом этот класс не должен захватывать указатель data: если data будет уничтожен, то mdata должен обнулиться.Если mdata сделать shared_ptr, то он просто увеличит счетчик и не даст уничтожить указатель в data. мне это не надо.Мне надо именно чтобы mdata становился нулем, когда data уничтожается.Как? weak_ptr? меня просто задолбало в гугле что про weak_ptr все как попугаи тявкают про перекрестные ссылки, вместо нормальных вещей. Не понимаю (да, я дурачок)
>>1496981при копировании класса все mdata этих классов должны указывать на data (но да, эти классы тоже не должны увеличивать счетчик data, и если data обнулился, то все mdata тоже должны обнулиться)То есть задача такая - класс Foo получает указатели на методы классов, которые потом вызовет через оператор () (ну некий вариант келбэка... точнее это реализация slot and signal).При этом этот класс не должен захватывать сам класс, чей метод он хранит (я не хочу наследовать классы - лишние действия если можно без, просто написав как-то так = bind(foo, Foo::bar).Если делать всё через голые указатели, то возникает проблема - если класс удален, то Foo начинает вызывать метод невалидного класса.С другой стороны если Foo будет хранить shared_ptr на класс, то тогда класс нельзя будет удалить, его метод все равно будет вызываться.если сделать ручную отвязку... ну ручная отвязка же, это как удалять память в ручную - забыл и потекло.Ну и короче в Foo нужен такой умный указатель, который не увеличивает счетчик ссылок. а в случае когда класс удаляется, обнуляет свой указатель
гребанные указатели... как заставить это работатьstd::weak_ptr<Type> t;typedef void(Type::Func)(Args ...);void operator()(Args ...args) const noexcept final { if (t.lock()) { (t->f)(args ...); } }не работает, выкидывает ошибку на *f
>>1496993мля, какой дебильный парсер двача. да еще и пастебин сдохКороче, пикчавыдает ошибку, нельзя указатель на функцию (я не ебу зачем и почему - делал по гуглу)
Ключевой момент тут в двойной косвенности. Есть некоторая коробка, на которую указывают йобы, а вот коробка уже указывает на data. Data при своей деструкции обнуляет коробку, и тогда йобы знают, что они указывают на нуль.
>>1497024но вообще у меня вроде получилось и через weak_ptr... Хотя вот интересно, а weak_ptr::lock слишком тяжелая операция,
>>1495729ну смотри: если ты не используешь sharep пойнтер, то тебе самому надо будет делать подсчет ссылок руками, те по затратам на скорость исполнения все равно так же будет
Ку, мне препод предлагает иследовательскую работу в анрил энжине с vr. Я в курсе про блюпринт, но с таким знанием меня потом нахер пошлют, собственно сабж, че читать что-бы начать разбираться? Опыт есть с юнити, но не с vr.
>>1496973дык и используй weak_ptrв чем проблема?или ты не понимаешь механизма его работы?вкратце, он не проверяется на "нулевость", а становится невалидныма чтобы с ним поработать, нужно получить из него shared_ptr, и, если он не валидный, то этого не получится сделать..так с ним и работают..у тебя типичная задача для weak_ptr, только, подозреваю, ты не понимаешь как с ним работать..
https://dev.to/fenbf/how-a-weakptr-might-prevent-full-memory-cleanup-of-managed-object-i0iКороче weak ptr использовать можно, но без make_shared, иначе смысл теряется
Сап. Хочу с использованием boost::program_options сделать чтобы./a.out --option 1 2 --option 2 -3 --option -3 +4 (тут именно через пробелы)возвращалоstd::vector<std::pait<int, int>>Можно ли это сделать без большой ебли, или проще передавать значения в виде --option 1:2 и руками разбивать и разбирать?
>>1497174>иследовательскую работу в анрил энжинеЭто как это вообще?Будешь открывать доселе невиданные возможности УЕЧ?при том, что сам в нем не бум-бум, лолРоссийское образование, такое российское...
Котаны, хочу писать сетевое ПО на плюсах, в плюсах не полный новичок.Какую либу для сокетов-хуёкитов посоветуете? Я писал беркли сокеты на Си, но они несовместимы с виндой (да, я линуксоид).И вообще, как плюсы для сетевого программирования? Или лучше другой язык юзать? P.S.: пиздон слишком медленный для этого, имхо, поэтому не предлагать.
>>1497360Вроде как то можно писать на Беркли в винде с помощью костылей, но я не уверен.А так у винды свои сокеты, их и гугли.
Пытаюсь в будущие. Есть пул сепуляторов. Я могу вернуть future<сепулька> сейчас, а назначить конкретный сепулятор делать эту сепульку позже с помощью bind или еще чего-нибудь?
>>1497360boost.beast, boost.asio, QtNetwork проще всего, для http - C++ REST SDK от мелкомягких. Первые два низкоуровневые, на них писать не очень приятно, кьют я лично использую я студент мне нравится, если кьют освоишь то вообще заебись будет, последний не использовал, но рекомендовали сеньоры-помидоры в чатах, говорят мол заебись.
>>1497431>Задача сложная? Нет, задачи интересные, это мой недосып виноват. На самом деле я очень рад, что смог найти работу с гибким графиком и хорошим коллективом.
Сап, двощТолько без рофлов, какие возможности трудоустройства есть в 2к19, зная плюсы?Что пишут, что НЕ пишут? Сетевые приложения пишут на плюсах? Заранее спс
>>1497603пишут дохуя всего, включая сетевые приложения. Если ты прям хочешь вкатиться в плюсы - задрочи алгоритмы и иди в яндекс. Ну или научись сосать хуй и иди в мейлру. Потом перекатишься в нормальное место
>>1497174> че читать что-бы начать разбираться? Открой демки УЕ4 и по ним разбирайся. Куча материалов и демок в инете, гугли. В блюпринтах ничего сложного нет, кроме того, что вместо 10 строчек кода, ты лепишь мышкой паука на два экрана. Это простой скриптовый язык с ООП. ВР приложения от обычных фактически ничем не отличаются. То есть ты можешь любое анриловское приложение запустить в ВР режиме, и оно сразу заработает. Самому придется только работу с контроллерами делать. С 99% вероятности С++ тебе не понадобится - почти все делается блюпринтами. С крестами там тоже ничего сложного, кроме того, что у них там свой препроцессор и своя система сборки на шарпе, в результате чего все очень неспешно компилируется.Самый большой гемморой будет, если вы нацелитесь на мобильные устройства вроде Oculus Go/Quest. Там мало того, что сам анрил для мобилок не очень припособлен (куча ограничений, куча багов годами висят), так еще и пидоры из фейсбука могут сломать API в любой момент, так что все снова заработает только в следующей версии УЕ4. Самсунг так вообще поддержку дропнул для своих очков. Теперь чтобы с ними работать, надо какие-то древние версии анрила качать. Короче, лучше не связывайся с мобилками или приготовься тушить жопу регулярно.
>>1497206>Российское образование, такое российское... Сейчас, бум всей этой ВР поеботы в образовании. Не только в РФ, на западе тоже. С игрушками все умерло, а университеты, наоборот, грантов набрали и лепят все подряд в ВР.
>>1497617шо поделаешьтехнология есть, а человеческий организм не принимает..некоторые люди блюют после сеанса vr в шлеме, у многих болит голова, болят глаза..по итогу в продакшон это худо проталкивается, остается только допиливать гранты в вузах
>>1497603Чтобы быть крестомакакой в 2019 и получать синьёрские 75к, тебе придется выучить qt+boost, уметь пилилить фронт на реакте и бэк на голанге. Такие дела.
>>1497631Это все дело привычки, причём недолгой. Основная проблема вр это хуевое железо и софт. Потому что аджайлоебы не могут в хардваре
>>1497634Бля, где вы такие вакансии находите вообще. Глянул что в моём городе по мидлам-сеньорам, вот первое что попалось, вполне адекватные требования и зарплата в 3к, что для моей страны практически равнозначно богу, который может позволить всё.
>>1497634ты же понимаешь, что это вакансия работает в 2 случаях:1) студент без опыта, который просто хочет жрать. наверняка ему еще и зп уменьшат раза в 22) какой-то старый пердун, который уже впринципе не можем/хочет ничего нового учитьтолковые крестоебы идут только на норм отлату, или съебуют за бугор или просто перекатываются в тот же энтерпрайз// мимо жава макака
>>1497651>2) какой-то старый пердун, который уже впринципе не можем/хочет ничего нового учитьХотел бы я посмотреть на фуллстак старого пердуна на реакте и голанге.
>>1497661если реально нужен с++ - то возьмут и старого пердуна, который только с++ и знает. в придачу к нему поставят студента-зумерка
а забористая у меня сегодня траваКороче, кому надо сделать систему событий (ну например когда окошко размер изменило), без всяких сложных штук:https://ideone.com/Pz9lwn(это еще черновое, там надо сделать защиту на случай если класс FooBla будет уничтожен (помечено todo) и скрыть уродство Connect
>>1497685Переделывай. Я должен сам типы параметров функций дописывать? Почему нет поддержки типа возврата?
>>1497693>>Я должен сам типы параметров функций дописывать? В EventSignal - да, для каждого события ведь свой список (для ресайза окна, два параметра, для клавы - описание клавиши и т.д.)>>Почему нет поддержки типа возврата?Если там будет стопятсотслушателей, то как ты их отследишь?Вообще этот код, это некий вариант паттерна signal and slot (который например используется в QT)Но этот паттерн довольно абстрактен и не без проблем (например мертвые указатели)Код сейчас переложу, там решена проблема с мертвыми указателями, да и выглядит получше
>>1497697затем что:- а) std::function очень тяжелый и тормозной (про это где-то в гугле была статья, с бенчмарками)- б) std::bind все равно также и выглядит- в) не обрабатывает ситуацию, когда класс метода будет уничтожен- г) все равно нужно делать обертку- д) не по феншую- е) чтобы нет?
>>1497702Понятно, стандартное ко-ко-ко велосипедостроителя про дикий оверхед стандартной библиотеки, при чем на самом деле велосипедостроитель не знает и не понимает нихуя, но уже бежит делать свою имплементацию.Ты сначала досканально изучи, как оно работает, изучи, где именно он тормозит и почему, и, возможно, ты захочешь сделать свой вариант под твою задачу. Но скорее всего не захочешь.А та хуйня, которой ты занимаешься, нихуя хорошего в плане профессионального развития тебе не принесет.
>>1497705а можно подробнее, я плохо владею шаблономагией,и самое главное, что мне это даст, а то не совсем понятно зачем мне вот такие сотни строкhttps://github.com/TartanLlama/function_ref/blob/master/include/tl/function_ref.hppкогда у меня все это в одну строку typedef
>>1497706https://probablydance.com/2013/01/13/a-faster-implementation-of-stdfunction/Я на эту, как ты выразился, херню потрачу всего день, так что я ничего не теряю.
обновил кодhttps://ideone.com/wseHBU- теперь оно умеет чистить память от мертвых указателей. То есть если класс слушателя будет уничтожен, никаких утечек, и ошибок памяти.- Connect теперь выглядит получше, как std::bind- в примере показано что на мой класс слушателя можно вешать сколько угодно функций с разными сигнатурами.Минус: - пришлось сделать макрос __EVENTLISTENERBODY.сначала я хотел сделать через наследование от IEventListener... но тут множественное наследование, и компилятор не уверен какой Register() вызывать. даже с подсказками там серьезный варнингЕсли кто подскажет как улучшить...
>>1497708>Я на эту, как ты выразился, херню потрачу всего день, так что я ничего не теряю.А лучше бы бабу нашел. Потому что вместо всей этой хуйни с дрочем на пост пятилетней давности можно было бы набрать аж 4 комады$git clone https://github.com/skarupke/std_function$cd std_function$g++ compare_functions.cpp -O2$./a.out std::function: 518 msfunc::function: 515 msvirtual function: 547 msИ пойти отдыхать. А если и учиться, то учиться правильным практикам, а не своей поебистике.
>>1497706вообще даже не так.. не совсем понимаю наезда. Во-первых я не против STD (там вон даже std::list есть если что)Просто всё должно использоваться по назначению, а не потому что круто-модно-молодежно. Мой код написан конкретно под мою задачу - обработка событий от разных систем.
>>1497712если там про std::function_ref - то он разве принят? у меня его в компиляторе нет.А если самому писать - то как я написал выше - я пока не осилил шаблономагию завезенную С++11/С++14/С++17
>>1497719>Мой код написан конкретно под мою задачу - обработка событий от разных систем.Твой код написан велосипедостроителем, хуево знающим С++. И вместо изучения С++ (например, как написать свой std::function), он страдает хуйней.
>>1497724Еще раз, зачем мне писать свой std::function?короче, давай так - ты знаешь что такое signal and slot? Ладно, даю подсказку, он основан на observer. Даю вторую подсказку - в некоторых реализациях можно использовать внутри std::function.даю третью подсказку - я не обертку над функциями делаю, а систему обработки событий которая должна обрабатывать неизвестные события.
>>1497725и знаешь в чем еще проблема конкретно твоего пикрила, вот у тебя будет класс Input в котором будет твоя function... А потом ты захочешь добавить FooB2. И? Полезешь изменять Input чтобы написать новый Prototype? это как бы нарушение инкапсуляции, и ведет к лапше.
>>1497735твои примеры, они просто про обертку над методом. Это вообще не то.Задача такая - классы могут генерировать события. При этом виды событий должны добавляться в любой момент без нарушения принципов ООП (то есть не должно быть лапши, добавление нового события в свой класс не должно менять другой код)- на каждое событие подписываются подписчики (Listener). Количество подписчиков неизвестно. это может быть один, два, стопятсот.- когда возникает событие - подписчики должны выполнить свой код. при этом, так как события разные, то и сигнатура функций будет разной (для этого и юзается Argc...)std::function не является решением, это всего лишь инструмент через который такую задачу можно решить. Всё равно придется писать обертку потому что:- подписчики могут уничтожаться в любое время, их срок жизни никак не связан со сроком жизни системы генерирующей события.- нужно хранить не одну функцию, а массив - то есть должны быть механизмы добавления, удаления и обхода- а там где-то еще многопоточность бегает - там свои сложности- всё это еще и не должно выбиваться из общего кодестайла, так что обертка 100% будет- если плевать на кодестайл, то не стоит плевать на проблемы STD и DLL (кто-нибудь помнит почему в DLL интерфейсах нельзя std::string а надо char*? это из той же оперы). так что всё равно обертка.
>>1497710>>1497724>>1497735Короче, хватит на пальцах. Раз вы не хотите знать что такое паттерн singal and slot, то я вам покажу, почему std::function - это ни разу не оноhttps://github.com/adrg/sling(здесь используется ваш std::function)или вотhttps://github.com/NoAvailableAlias/nano-signal-slot(но здесь велосипед, да)Я вообще решаю другую задачу, так что... странно меня обвинять в страдании хуйней, если вы даже не поняли задачу которую я решаю.
>>1497738Так ты объяснять не умеешь. Никто и не говорил, что это одно и тоже. Посоветовали использовать std::function, все остальное ты сам надумал, еще и обижаешься на нашу помощь.
>>1497739ну я не вижу решение через std::function, которое было бы проще и эффективней:- за функцию у меня отвечают две строчки которые на самом деле одна (typedef) - для этого мне не надо тянуть довольно тяжелые заголовки.По какой причине (кроме религиозной) имеет смысл одну строку кода заменять на тяжелый заголовок?- все одно пришлось бы делать вариативный шаблон EventSignal, потому что он должен иметь разное количество аргументов под свои события. Ну, возможно какой-нибудь шаблономагией из C++17 это и можно было бы решить - я не знаю.- и всё равно нужно было делать решение для ситуации когда слушатель убивается раньше обработки события.
>>1497742>за функцию у меня отвечают две строчки которые на самом деле одна (typedef) - для этого мне не надо тянуть довольно тяжелые заголовки.Неправда. У тебя класс должен имплементировать интерфейс EventResizeEventListener, и это является самой большой проблемой кода. Типичное ООП в стиле 90-х: для простой задачи с простой семантикой наворачивается какая-то ебанутая иерархия классов. Алло, я хочу просто подписаться на событие, нахуя мне этот АбстрактПроксиСинглетовЭвентРисайзЭвентЛистенер и 10005000 других классов такого плана.А на самом деле для механизма коллбэков достаточно std::function, который делает type erasure, и тогда подписываться сможет кто угодно, даже не класс вообще, лишь бы была нужна сигнатура.Что касается "удаления листенера из списка подписок в деструкторе", то нет листенера (а есть std::function) - нет проблем. Проблема надумана.
>>1497759как ты подпишешься на событие, если у разных событий разные типы и количество аргументов?даже через std::function нужно эту сигнатуру указывать, или покажи как можно в std::function передать функцию не указывая аргументы>>Что касается "удаления листенера из списка подписок в деструкторе", то нет листенера (а есть std::function) - нет проблем. Проблема надумана. Это на абстрактных единорогах,В реальном проекте листенер - это метод класса, который работает с этим классом. например:Widget : public EventResizeEventListener;или ты предлагаешь писать на функциях а данные перекидывать через глобальные переменные? или как?
>>1497759давай по другомувот тебе список ивентовkeyboardHandlermouseHandlertouchHandlergamepadHandlerwindowHandlersystemHandleruiHandleranimationHandler soundHandlerupdateHandlerу каждого из них свое количество аргументов, у одних это две переменные, у других это один класс, а у кого-то может и вообще нет аргументовТеперь давай без имплементации и 100500 других классов покажи мне решение...Через ООП конечно же. Ведь те, кто должны реагировать на события - это не под типы, у них своя логика, свои члены, свои методы
ооп-ненавистник прокрался в тред.>>1497759опять парадигма говно в жопу заливает?Тебе в этой иерархии не надо ковыряться, а просто переопределить метод.
Сап, аноны. Мне нужно выполнять код, использующий библиотеки кьюта при обращении к хосту по определенному порту. Как лучше это реализовать - написать программу, которая будет запущена в фоновом режиме и какимто образом слушать этот порт, или есть возможность с помощью оси (шиндоуз) выполнять код на хосте при обращении на порт?
>>1496993Если что, у weak_ptr нет оператора разыменования, т.к. перед использованием содержимого его надо обязательно проверить на существование.Надо делать так:auto ptr = t.lock();И если ptr не nullptr, то к нему уже обращаться как к указателю
>>1497759ладно, переделалhttps://ideone.com/7SS1k6Теперь все классы-слушатели наследуются всего от одного интерфейса Listener. Этот интерфейс нужен чтобы оно потом в случае уничтожения класса почистило память. С этим пока не нашел решения (напомню, на события реагируют не функции, а методы классов, так как все данные в классах. И вот эти классы могут уничтожаться раньше чем менеджер событий, поэтому нужно чтобы менеджер выкинул повисшие указатели....Вообще эту задачу можно решить через умные указатели без наследования, но я так и не понял в каких случаях weak_ptr не дает освободить указатель, да и конструктция в итоге уродливая)перегружать теперь ничего не надо
Сап двощь, Нужна помощь от посвященных в плюсы Как сделать, фоновое приложение, которое активируется при зажатии указанной кнопки, с меня как всегда
>valgrind>AddressSanitizer/ThreadSanitizer/MemorySanitizer>PVS-Studio, cppcheck, cpplint, coverity>Из Rust в данный пиздят фичу lifetime analysis>Все большие компании юзают статический анализ и санитайзерыВЫ ВСЕ ПРОСТО НЕ МОЖЕТЕ В НОРМАЛЬНЫЙ КОД А Я МОГУСектант, плиз
Аноны, хочу попробовать перекатиться в дс2 работать. Чё там у зарплат крестовиков-синьоров, в своей дыре получаю 90к, на какую сумму вообще претендовать, уровень жизни и за разный.
>>1498040А как это работает? Я думал там все эти блюпринты компилятор превращает в те же самые бинари, как если бы ты на плюсах писал и это просто фронт-енд для них.Мимо другой
>>1498104но не гарантирует, что сгенерированный из блюпринтов код будет таким же, как если бы ты реализовал ту же функциональность, написав всё руками. хотя и руками ты можешь написать еботу, которая работает хуже блупринта.
для какой практической задачи ты пытаешься сделать систему обработки событий, основанную на сигналах и слотах?
>>1497986Я вот смотрю и нихуя не понимаю, в чем смысл? При как обстоятельствах у меня будет несколько разных классов с одинаковыми методами и почему я им должен слать сигнал? Я лучше вектор из каллбеков запилю.
>>1498030>опыт разработки был? есть что-то из кулстори?Периодически приходится делать простые демки в VR. Народ такое любит заказывать: походить по помещению, потыкать в интерактивные подсказки, посмотреть анимации простенькие. Анрил для этого очень удобен - все быстро накидывается мышкой, а в ВР хорошо чувствуется масштаб, особенно у всяких гигантских йоб вроде танкеров и ракет. Кулстори нет особенных.
>>1498212ты не понимаешь сам паттерн signal and slot?А для чего это надо? например в движках, или библиотеках гуи. Ты же не знаешь сколько у пользователя будет кнопок, может одна, может две, а может все 10500 на всё окно.И все эти кнопки должны реагировать на события... Конечно это все может делать и виджет мастер, но в таком случае нарушаются принципы ООП - в таком случае мастеру придется знать о своих элементах слишком много... А что если нужно добавлять новые элементы со своей логикой? Этот путь - это путь антипаттернов - гудобжекта и спагеттикода.(впрочем так тоже делают - нет же единого решения задачи)
>>1498336>ты не понимаешь сам паттерн signal and slot?Я изучил вопрос и все, что нарыл, это то, что сигналы-слоты удобны тем, что позволяют пробрасывать ООП-сообщения между тредами. Если у тебя однотредная реализация, она ничем не лучше вектора коллбэков по функциональности. Можно написать пару шаблонных функций уровня "добавить коллбэк в вектор колбэков" и "пройтись по вектору коллбэков и вызвать каждого колобка", но не более того.А вообще эта хуйня появилась когда в крестах не было лямбд.
>>1498341observer/listener? это все из одной области. И кстати, QT тут ни при чем. Просто в QT этот паттерн юзают, но не изобрелисигналы в бусте пришли (хм, в 2001 году чтоли?)https://www.boost.org/doc/libs/1_63_0/doc/html/signals.htmlИ вроде как их изобрели чтобы в С++ завести событийно-ориентированное программирование о котором вроде уже и забыли
>>1498354Эх, зумерки, для которых 2001 год - это ниибаца древность.В 2001 году я в kdevelop изучал Qt, который к тому времени был уже довольно старым. Вот тебе пруф наличия там сигналов и слотов аж в 1998 году. Раньше не могу - https://download.qt.io/archive/qt/1/ на этой странице нихуя раньше нет.
>>1498349ну ты не про то. при чем тут лямбды? Во-первых, мы пишем в ООП, то есть никаких глобальных функций. Есть классы, у классов есть методы для того чтобы работать с членами класса (инкапсуляция, все дела)Соответсвено какой-нибудь метод может быть реакцией на событие - например игрок нажал кнопку, значит надо вызвать метод Player::Move.И все замечательно с твоими векторами коллбеков ровно до тех пор пока класс Player не будет удален, а затем нажата кнопка. Угадай что будет? веселый дебаг, потому что твой коллбек хранит указатель на функцию класса, когда этот класс уже давно удален из памятиОдна из задач сигналов и слотов - уметь отключать мертвые классы.
>>1498358да какая разница?просто он лучше всего подходит для либ с гуи, где много событий, но неизвестно сколько объектов
поделитесь шаблонорешениемвот есть интерфейс IClass.От него наследован класс MyClassА еще есть шаблонный метод <typename T> Foo(T t)так вот. надо в Foo сделать проверку что T наследован от IClass,Как?
>>1498369https://stackoverflow.com/questions/17200755/c-partial-template-specialization-in-combination-with-stdis-base-of-and-std
>>1498537На самом деле ничего, это я слепой даун.Прости, друг, я невнимательно прочёл сообщение анона, на которое ты ответил - почему-то показалось, что ему нужен рантайм-еррор, а не компайлтайм.
>>1498658Класс A не знает, как ему складываться с B. Либо определи сложение в обоих классах, либо вне классов.
>>1498658У тебя для A не перегружен operator+(B). Либо перегружай, либо делай как здоровый человек operator+(A, B) и operator+(B,A) и не ебись с implicit conversion
>>1498665 Не понял тебя. Зачем ему это знать, если я определил для класса A преобразование в B? Да и даже если я в А вставлю это A& operator+(A& d){ x+=d.x; y+=d.y; return *this; }Ничего не поменяется
Я не сишник, но у нас препод очень не советует делатьusing namespace std;Почему? Чем лучше постоянно писать std::(нейм) ?Спрашиваю просто из интереса, я лабы все равно на другом яп пишу.
>>1498674>Зачем ему это знать, если я определил для класса A преобразование в B?А откуда ему знать, что ему надо преобразоваться в B?И кстати, не надо возвращать у сложение B&, ты же не собираешься писать что-то вродеb + a = 3
>>1498686Захламляет твоё пространство имён. Чтобы не возникало двусмысленности, если у тебя в коде будут функции с теми же именами.
>>1498703Вообще, я даже не обратил внимания, что у тебя за странный способ сложения? a + b и так должно создавать новый объект, который ты будешь использовать в выражении, типа a = a + b. А у тебя оно с какой-то стати объект изменяет. Тебе надо было перегрузить оператор += для этого.Вот так должно быть https://ideone.com/JRcjjp
>>1498686Потому что у вас лабы, и кроме лаб препод ничего не делал. В большом проекте using будет, но будет сидеть только там, где он действительно нужен - внутри класса, функции или вообще блока кода, и не лезть наружу. Это касается не только std, а любых псевдонимов классов и неймспейсов.
>>1498747Ты так говоришь, будто во всех проектах чуть-чуть больше лабы возникает проблема двусмысленности имен.Даже в очень большом проекте двусмысленности может не возникнуть. А может возникнуть, хуй его знает, проблема как раз в том, что пиздец подкрадывается как всегда незаметно, и ты бежишь с горящей сракой менять все pizda на std::pizda.
Как убрать окно из отрисовки? Есть приложение, которое берет пиксели с хендела рабочего стола, то есть само приложение тоже в нём отображается, хочу убрать его с отрисовки, будто его и нет.
>>1498361>никаких глобальных функцийБЕРЁШ ГЛОБАЛЬНУЮ ФУНКЦИЮ@ЗАВОРАЧИВАЕШ В НЕЙМСПЕЙС@ГОТОВО, ТЕПЕРЬ НАША ПРОГРАММА НАПИСАНА В СТИЛЕ ООП
>>1498361> Во-первых, мы пишем в ООП, то есть никаких глобальных функцийЕбать дебил. Посмотри последний цппкон. Там популярно объясняют, что глобальные функции нужны, и напоминают, что С++ не тоталитарная ООП помойка.
>>1498797> А может возникнуть, хуй его знаетПоэтому лучше не использовать using namespace в хидерах. Так оно протечет по всему проекту. Если использовать только в cpp, то будет гораздо проще исправить столкновение имен только в одном файле.
>>1498835угу, страуструп всегда писал что не надо перегружать интерфейс класса, а вместо этого, по возможности, делать свободные функции-помощьники рядом с классом, объединяя это все в одну сущньность посредством пространств имен
>>1499008Я не хочу скрывать само окно, оно показывает мой рабочий стол, я хочу чтобы оно не показывалось. Прикреплю скрин, чтобы было понятнее, хочу чтобы окно вовсе не показывало себя. Могу сделать чёрный фон SetWindowDisplayAffinity(hWnd, WDA_MONITOR), но это не то, чего я хочу.
>>1499033Ну передай своему окну hide перед скриншотом и разверни позже, раз уж не получается никак.Но вообще 3 минуты гугла подсказали, что bitblt может тебе помочь.
есть лямбда функцияauto a = [](int g){return g*g;}как поместить ее в контейнер map, который хранит пары строка - std::function<int>?
Анон, я давно (12лет) погромирую бекэнд на C#/F#/JS/TS/Python, хочу вкатиться в плюсы (задачи - хоббийный ардуино-ARM/ESP-ембеддед, интероп/FFI с языками выше для работы, в дальнейшем - сетевые числодробилки в сфере трейдинга, тоже для работы).Читать книги для нюфань скучно, справочники лениво. Что из списка в шапке подойдет для быстрого вката в современный, 14/17 стандарта, язык? Там в основном книги 200x годов, а стандарт 2011 вроде внес серьезные изменения. Взялся читать Мейерса "Эффективный и современный C++" 2015, но понял что не хватает БАЗИСА. Нашел на scanlibs пикрил 2019 года, описываются фичи в т.ч. 17 стандарта. Как думаешь, подойдет в качестве экспресс-курса, если дополнить практикой с leetcode/codewars/etc?
>>1499120>Там в основном книги 200x годов, а стандарт 2011 вроде внес серьезные измененияДа не особо они серьезные. Основные принципы не поменялись, просто стало чуть проще их применять. Читай библиографию Мейерса целиком. Если же прямо совсем лень, читайhttps://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
>>1499150Только для тех, кто был в анабиозе в 2003 года.Половина фич это перетащенный в стандартную либу буст, вторая половина - синтаксический сахарок.Разве что лямбды реально повлияли на стиль, но это тоже сахар.
>>1499158Только вот в учебниках никакого буста нет. В итоге прочтет книгу по старому стандарту, откроет код, а там лямбды, перемещение, вывод типов, умные указатели и тд
>>1498797>менять все pizda на std::pizdaЕбанатство какое-то. Почему нельзя новые pizda использовать как neo::pizda?Это получается стандартную библиотеку нельзя по-человечески юзать, а всяким левым хуйням можно, лол.
>>1499160Он переживает не о том, что там чего-то нет, а то, что там что-то неверное что потребуется потом забыть. А это не так.А то что ты упомянул есть в том Мейерсе про который он писал и посчитал что базы не хватает.
>>1498686В cpp файле делай что хочешь. А вот делать так в хедере это блядство, потому что ты поломаешь код, который тебя заинклудил.
Что можно почитать/посмотреть о Qt с нуля, т.е. чтобы с самых основ все идеи заложенные в него пояснялись на примерах? Просто до этого на нем писал как еблан - брал гуй, а логику писал чуть ли не на простых плюсах, какая-то хуйня получается, по сути путь в никуда. Можно даже на английском, если какая-то годнота.
>>1499161Можно и так, но потом кто-нибудь въебет using namespace neo; и все пойдет по пизде. А вообще >>1499015 прав, using namespace std; в сурсах вполне ок решение.>>1499168Меня забавляют байтоебы, на каждом углу кричащие, что они настоящие программисты, а не какие то веб макаки, а потом идут писать десктоп, который не сильно далеко от уеба ушел по сложности задач.Ничего не имею против тебя, плюсов или кьюти, я и сам в какой то мере байтоеб, просто вспомнил забавное наблюдение.
>>1499220все таки QT десктоп, это кардинально иной уровень сложности, чем вебговно, как не крути. Но тем не менее, если бы я писал гуй - я бы его точно писать не крестах.
>>1499229>это кардинально иной уровень сложности, чем вебговно, как не крути.Где там сложность? Раскидал по форме элементы, написал обработчики событий -- все нахуй.Разве что только если гуй -- это всего лишь фронтэнд к какой-то пиздец сложной логике вроде какого-нибудь компилятора или виртуальной машины, но пиздец сложную логику и в вебе можно придумать. У вас похоже представления о вебе прямиком из 90-х, когда пых использовали для счетчика посетителей на хоумпейдж.
>>1499233> если гуй -- это всего лишь фронтэнд к какой-то пиздец сложной логикеПриведи пример где это не так? У меня вообще большинство десктоп приложений это обёртка над терминалом, чтобы кнопочки тыкать можно было. А веб говно потому-что там макаки вообще хуй положили на оптимизации и теперь какие-то одностраничные лендинги весят по 50мб и кушают по 1гб памяти, в десктопе на крестах по крайней мере я такой хуйни не замечал.
>>1499177Прям годнота? Я в 16 году начинал читать актуальное на тот момент издание, но по какой-то причине дропнул. Ок, попробую, спасибо.
>>1499219Неужели чтобы такое реализовать на ассемблере потребовалось бы такое огромное количество строк кода?
>>1499302Шлее о многих аспектах не рассказывает, или говорит вскользь. В целом для ознакомления заебись, считай прочитаешь ее за неделю, поделаешь примеры из нее, а дальше нужно будет садиться и писать что-то самому. У кьюта огромный плюс - охуенная документация, доступная прямо из иде, с примерами и описанием каждой функции. Как почувствуешь готовность - можешь почитать как там мок устроен, нахуя ты эти странные макросы вставляешь куда попало и почему функциям-сигналам не нужна реализация. Хотя да, кьют часто ругают и не зря, хотя и в вакансиях я его вижу относительно часто. Лично мне как студентоте было заебись написать что-то полезное, а не дрочить байты и лабы в С с классами.
>>1499335> У кьюта огромный плюс - охуенная документация,Хочу рассказать, что я делал два примера по "документации" и они нихуя не работали, поскольку в самом доке пропускали части кода, приходилось еще и сорсы примера открывать. Неудобно. Но ты не про примеры говоришь. А сама документация как референс да, неплохая.
>>1499341Ну не знаю, я код модели для тривьюхи практически полностью себе в проект впихал, и работало заебись, разве что немного модифицировал под свою задачу. Не помню такого, что код прямо не работал, разве что действительно там где-то пропускают часть кода для упрощения.
>>1499357>нормальные люди пишут на winapiда ладноесли сейчас хочешь писать для развлечения (а натив под винду для заработка уже не попишешь, нет работы), то гораздо интересней писать uwp приложениеwinrt - замечательно спроектированная нативная библиотека
>>1499168отделяй гуй от реализации всегдапросто представь, что у твоей проги будет 2 интерфейса - командной строки и гуйте пишешь сначала ядро, из него будет торчать открытый api интерфейс
>>1499160>а там лямбды,лямбы вообще синтаксический сахарок, для того чтобы не писать свободные функции или функторы в случае когда они будут применяться на один раз..
>>1499160> вывод типоввывод типов вообще то в языке уже очень давно, как только появились шаблонывывод типов работал для шаблонов свободных функций и для функций-членов классовсоответственно и правила вывода типов уже тогда были и были хоть и сложными, но интуитивно понятнымии в новых стандартах эти правила во многом применимы и на вывод типа выражения (auto, deltype и прочее), те ничего особенно нового..
>>1499160>умные указателив стандарте 98 года уже был один умный указатель, а вообще на конец 90 уже были написаны книги, половина объема которых была посвящена теме умных указателей, например книга джеффа элджера "библиотека программиста с++" (неудачное название у книги, у александреску "современное проектирование на с++" тоже не очень удачное название было)потом была уже методика raii, которая закрывала часть задач умных указателей
>>1499160и вообще, если крупно обобщить, то важнейшее семантическое изменение в языке - это появление механизма перемещенияв будущем (если язык не умрет) это сильно изменит подход к проектированию многих библиотек
>>1499147а я вот из тех, кто как раз прочитал все книги майерса (просто для развлечения)и вот самой полезной и удачной у него считаю последнюю книгу, где он обсуждает тонкости стандартов с++11 и с++14а предыдущие книги - это, блин, такая простота на данный момент что просто даже не знаю
>>1499120я бы тебе вообще не советовал изучать кресты, пиши (и зарабатывай) на том что ты знаешьа для интереса продолжай грызть f#, он прикольный, языки ml-семейства вообще прекрасно подходят для развлечения
>>1499063не очень понятно зачем тебе для этого лямбдыдостаточно именованой функции, и указателя на нее помещенного в мапу
>>1499409F# для развлечения я уже знаю, на работе втащить его в прод довольно сложно: в финансах все довольно консервативненько, еще и спецов на рынке мало. Я много дотнетчиков прособеседовал (ок 50 за последний год), у нескольких в резюме был F#, и знаний у всех меньше, чем у меня. Да что там говорить, даже питониста толкового х найдешь, те что меньше 200 просят нихрена не знают, а остальные как будто в ai/ml или гошку укатилисьПлюсы они уже вот тут, куча либ и сервисов на работе, и несколько отладочных плат дома.А деньги мне больше не от языков программирования приходят, а от болтовни, сроков и результатов моей команды и порядка в джире. Тимлид же лул.
У меня 2 проблемы. Во первых почему gcount у меня всегда равен нулю(читаю строки гетлайном из файла), а во вторых почему tellg не работает? Выдает рандомные числа не совсем рандомные на самом деле, они рандомно отличаются в пределах 10 от того что считает str.size()+2
>>1499464не забивай себе башку еще и крестамищас только книга по стандартной библиотеке - 1200 страниц, книга по шаблонам - 850 страниц, а там ничего особенного не написано, чисто вводные книги в темусам 17й стандарт - 1650 страниц, лолнафиг тебе это надо
Не нашел как мне усыпить программу на (60/(45*4)) секунд, работаю под линукс, нашел только sleep() но эта функция принимает только секунды, подскажите как сделать задержку.
>>1499399>в стандарте 98 года уже был один умный указательЭто был плохой указатель и он ушел от нас.>>1499602using namespace std::chrono_literals;std::this_thread::sleep_for(20ms);
>>1499605чтото у меня ошибок навалило error: 'chrono_literals' is not a namespace-name error: expected namespace-name before ';' token using namespace std::chrono_literals; error: 'std::this_thread' has not been declared error: unable to find numeric literal operator 'operator""ms'
>>1499605>Это был плохой указатель и он ушел от нас.хех ты даже щас и не вспомнищ чем он был плохон справлялся со своими задачами и все
>>1499672Ну не то чтоб плох, но до введения семантики перемещения разрушающее присваивание выглядело пиздец как странно.
>>1492523>геттеры и сеттеры>как нормальное оопЭто же ублюдство пиздец, В простой хуйне типа точки или вектора проще ебнуть структуру, а в каком-нибудь YobaCalculator вся логика должна быть заключена внутри объекта, чтобы тупо загнать через конструктор сеттинги какие-нибудь и дёргать его, как абстрактный черный ящик.
Задал вопрос в треде для ньюфаней, но продублирую и здесь.Ребят, если интересна робототехника, а точнее программирование дронов и небольших роботов, ну и сюда же разработка их беспилотного режима, это какие языки? Питон и С++?
>>1500434рую ссылку, то тебе нужно открыть вторую ссылку и посмотреть на адрес бар, а затем зайти в первую ссылку и совершить поиск полученной на предыдущем шаге информации.
>>1500433>очнееУ нас в вузе такое чисто на питоне делали, мб там либы какие-то плюсовые есть уже, хуй знает.
>>1494246http://www.cplusplus.com/reference/sstream/stringstream/Можно извратиться используя стрингстримы. Это тоже самое как вывести переменную в стандартный выход, но ето типа стека. Т.е. загоняешь переменную в стринстрим, она им хавается и переваривается в строку, а потом высираешь это на экран.Этой хуйнёй можно даже типы перегонять в друг друга через стринги. По ёбнутому конечно, но работаети.
>>1500459"сделать что-то на питоне" это означает написать кучу скриптов, вызывающих для работы сишный и крестовой код
>>1500433 во первых тебе надо знать целевую архитектуру, например это АРМ, другим там пока не пахнет. Даташиты на камни. Электротехника. Энкодеры ололо, шины и прочая низкоуровневая хрень с байтоеблей.Язык Си. Можно использовать С++ как Си с классами, просто для удобства. Но про STL забудь, у ембед систем памяти с гулькин хуй.Если ты ещё не понял, самого кодирования в робототехнике не так много, как кажется, гораздо больше тебе понадобиться смежных знаний.
Как получать нажатия даже если мое окно свернуто? Хочу делать скриншот при нажатии принтскрина, то оно работает, только если мое окно активно. Есть методы получше глобал хука?
>>1500692> Но про STL забудь, Есть же etlcpp и прочие> у ембед систем памяти с гулькин хуй.64-128кб уже достаточно доступные, чтоб об этом не переживать так сильно
>>1500616>то на питоне" это означает написать кучу скриптов, вызывающих для работы сишный и крестовой код>Какой язык такие и программы
>>1501076извини, у меня было ощущение, что ты сам не знаешь, на чем пишешь, поскольку ты даже не написал на чем. а че винапи не гуглится?
>>1501122Гуглил, там говорят кидать глобальный хук, я не хочу, потому что тогда приложение всегда будет требовать права администратора.
Сап, аноны. В своей программе я работаю с "трехмерными" текстурами, некоторыми большими байтовыми массивами, внутри представленные как нересайзещейся вектор. И вот не вывозит по скорости код, создание такой и текстуры занимает много времени, ее обработка тоже. Есть какие-нибудь либы по обработке этого говна?
>>1501246>внутри представленные как нересайзещейся вектор.Почему не хотя бы std::array тогда?Или вообще бустовский мультиаррай, там наверняка есть прокси классы для ускорения вычислений над многомерными массивами.
>>1501246>создание такой и текстуры занимает много временину дык поделай оптимизации, типа банального reserve, операции перемещения типа emplace_back вместо push_back и прочее>ее обработка тожекакие операции то нужны? че делаешь то? прямой перебор, доступ по интексу у вектора оче быстрые, быстрее не сделатьв любом случае без каких то подробностей и кода сложно что-то посоветоватьно совершенно точно, нужно сначала попытаться соптимизировать собственный код, работающий с stl, чем сразу бросаться искать альтернативные решения на стороне
In function `audiere::OpenDevice(char const, char const)':main.cpp:(.text._ZN7audiere10OpenDeviceEPKcS1_[_ZN7audiere10OpenDeviceEPKcS1_]+0xe): u ndefined reference to `AdrOpenDevice'Что значит данная ошибка?
>>1501598Что-то мне подсказывает, ему для начала нужно с дебага на релиз переключиться>>1501603Библиотеку нужно прилинковать
>>1501611override и final – для безопасности (типа как const, просто чтобы компилятор ошибку выдал если пытаешься сделать что-то не то). Ну а без virtual виртуальной функции не получится.
>>1501606g++ main.cpp -L /usr/local/lib/libaudiere.aВроде бы подключение библиотеки проходит так, но у меня все ровно вылетает ошибка
>>1501606да, даstl традиционно очень медленный на дебаге, скорость в некоторых местах может проседать на порядокно возможно, в новых компиляторах это и не такно раньше было точно
>>1501648Флаг -L задаёт путь к библиотекам, чтобы потом линковать их с помощью -l[название библиотеки без префикса lib и расширения .a]. Либо убери -L и оставь полный путь, либо напиши -L /usr/local/lib -laudiere
>>1501680/usr/local/lib у него все равно будет в путяхАлсо стоит заметить, что порядок важен иg++ main.cpp -laudiere #работать будетg++ -laudiere main.cpp #работать не будет
>>1501598Не нужно. STL никогда не подразумевала хорошую имплементацию 3д массивов, а vector<vector<vector<>>> это вообще худшее что может быть. Даже васяновелосипед на основе vector<> и маппинга из 3д в 1д будет сильно лучше работать
>>1492475Эх, помню я когда препод по программированию в универе посчитал передачу в функцию ссылку на указатель как каким то неимоверным предом, хехе, как же забавно сейчас вспоминать.
>>1501923>передачу в функцию ссылку на указательочень подлая вещь, на самом то деле, поведение которой может удивить среднего разработчикатк в этом случае не производится низводящих преобразований..
>>1501953по ссылочке, по универсальной ссылочке, которая обеспечит move-семантику..никаких проблем..разве что вообще дурной тон оперировать контейнерами, в функцию на обработку нужно передавать пары итераторов, указывающих на диапазон..а если следовать идеологии stl то и такие функции не следует писать, а надо действовать через стандартные алгоритмы, те писать по сути в псевдо-функциональном стиле
>>1492480>Стоит юзать вектор или можно обойтись в принципе пацанским выделением динамического массива в проде? Какие подводные у обоих вариантов.главный подводный камень - то что, задавая такие вопрсы, ты, по видимому, уже работаешь..а это пиздец..
>>1501959судя по твоим ответам, ты не работаешь, и не скоро еще станешьсперва, ведь, надо школу закончитьа там и армия, где ты будешь рассказывать, какой ты у мамы самый умный
>>1501961Дружочек, если у тебя в две тысячи девятнадцатом году возникает мысль "а не выделить мне немного памяти через new", то ты мудак и хуй его знает как прошёл испыталку. Или у вас в конторе все такие отбитые и код с new проходит CR?
>>1492442 (OP)Подскажите, важно ли хорошо знать С, прежде чем преступать к С++, или будет достаточно пробежаться по подобному курсу https://www.youtube.com/playlist?list=PLRDzFCPr95fLjzcv6nNdjMu_9RcZgIM9U ?Уже более-менее знаком с java и python, хочу перекатиться на плюсы
>>1501981Синтаксис тебе и так придется выучить (си практически подмножество цепепе). Лучше учи стандартную библиотеку плюсов, если понадобится, выучишь и стандартную библиотеку си.
>>1501598Задача такая: мне приходит массив данных, амплитуды, в двумерной сетке, и я по приходу сразу проверяю, что из этих данных принадлежит уже сформированным кластерам. Картинка похожа на долматинца, черные пятна (с резкой границей) на белом фоне. Так вот мы сканируем долматинца вдоль, и пробуем сразу объединить черные пятна - кластеры.Кластер - вектор. Я создаю новый вектор с каким-то приблизительным размером и резервирую ещё половину.По приходу нового измерения проходит поиск по всем формируемым пятнам. Пятно завершилось - уходит из формировалки.Формируемые пятна хранятся в листе. Параллельности нету нихуя, все ебашится в одном потоке.Задача вроде как телретически решается в матричном виде, и Eigen очень хорошо заходит с его-то бекэндом, и векторизуется по-хорошему все это говно, но надо как-то в матричном виде все записать.>>1501310Мультиаррай почему-то не понравился, не помню почему. Как-то не совсем для задачи подходил.std::array говорил мне, что многовато на стеке выделяется блядь, не хорошо так. Поэтому взял стд::вектор, там в куче создается все.>>1501606> Что-то мне подсказывает, ему для начала нужно с дебага на релиз переключиться))))Всем спасибо.
Может кто знает. Как сделать так чтобы в подсказке студии члены класса были первыми, а то заебался скролить весь тот срач что валится от сишной либы.
>>1502060>Картинка похожа на долматинца, черные пятна (с резкой границей) на белом фонеТак тебе вот это нужноhttps://docs.opencv.org/trunk/dd/d49/tutorial_py_contour_features.html
Хочется написать простенький мессенджер, сейчас пишу серверную часть на плюсах.Подошёл к моменту когда нужно прикручивать бд.Хотел обойтись без MySQL,заюзать что нибудь более легковесное и модное-молодежное.Посмотрел в сторону redis, но насколько понял, это уж слишком что то простое, хранение и извлечение текстовых сообщений там будет неудобным.Что можете порекомендовать? Mysqlite?
>>1501981имхо, нужно как минимум прорешать K&R прежде чем браться за изучение крестовно я сторонник последовательного изучения
>>1502060на проекте нельзя использовать сторонние опенсорс решения? если можно, то не пили велосипед, используй их
>>1502180Текстовые сообщения , ассоциированные с пользователями их приславшими,с беседами в которых эти сообщения были отпралвены и метками времени - чтобы к примеру для определенной беседы, в которой состоят Петя Ваня и Маша можно было удобно запросить сообщения за последний день, и дальше, если потребуется, или устроить поиск по истории сообщений к примеру.Или неужто мне предложите это в оперативной памяти хранить?
Хочу (пере)написать дерево (не бинарное). Что лучше выбрать - (уник) пойнтер на данные или наследовать нод и добавлять данные-члены в класс нода? Первая штука как-то красивее, а вторая штука позволяет брать данные без node->value->mydatamember, просто node->mydatamember. Пока что написал второе, но почему-то захотелось переписать.
>>1502200> (уник) пойнтер на данныепросто член с данными, пойнтер тут нахуй не нужен. в общем, выбор между хранением в ноде или класса с моей хуйней, или просто всю хуйню в сразу нод добавить.фикс
>>1502206>>1502200А, даже переписывать ничего не надо. Просто наследовать и добавить член с данными и у меня два дерева на выбор.
Ананасы, спрашиваю без подъёба и транслирую мнение, а не безоговорочное утверждение.Нахуя учить плюсы в 2к19, если любая вакансия на плюсах == разгребание легаси-говна? В имбэддэде пишут на Си, в вебе совсем другой стэк технологий, там макакаскрипт с зоопарком фреймворков рулят отраслью, микросервисы и распределенные системы пишут на Го нынче.Если ты не хочешь стать гейм-девелопером с релокейшеном в СШП (ибо в рашке ловить в этой отрасли нечего), то нахуй учить плюсы? Занимает это все дело годы, ибо это плюсы, а выхлоп никакой, 9 работ из 10 для плюсовика - разгребать легаси-дерьмо. Поправьте, если неправ, так как это мнение, а не утверждение.
Есть два типа.Первый отвечает требованиям StandartLayoutType, второй - нет.С экземплярами этих классов нужно сделать действие А. Но для StandartLayoutType А означает одно, а для не StandartLayoutType - другое.Как написать универсальную функцию, либо шаблонную конструкцию выполняющую А для любого из этих типов?
>>1502263найди любого человека со студентческим билетом и на него оформи бесплатную лицуху сидел так 3 года, потом на работе купили>>1502271> если любая вакансия на плюсах == разгребание легаси-говна?Нет.> Если ты не хочешь стать гейм-девелопером с релокейшеном в СШП (ибо в рашке ловить в этой отрасли нечего), то нахуй учить плюсы? В любом случае нахуй не надо учить плюсы, если ты планируешь быть игромакакой, надо учить либо хуюнити, либо блюпринты.> 9 работ из 10 для плюсовика - разгребать легаси-дерьмо.Да, но тебе никто не мешает устроиться на 10ую работу.
>>1502284>Нет.Аргументировать можешь? Где сейчас плюсы незаменимы и широко используются? Про имбэддэд, вэб и всякие микросервисы я говорил - там С++ заменен давным-давно.
>>1502284> Нет> Да, но тебе никто не мешает устроиться на 10ую работу.Противоречишь сам себе. Сначала говоришь, что, якобы, не 9 работ из 10 на крестах - разгребание легаси-говна, а потом говоришь, мол, да, но никто не мешает найти 10ую работу. Шта? Определись
>>1502308Большая часть работ говно. Но оно и в вебе, и во всем на свете. Тебе никто не мешает прокачаться и выбирать реально интересные предложения, как сделал я.>>1502306> Где сейчас плюсы незаменимы и широко используются?Все системное программирование, алле. Весь high-performance. Бэкенд всех сервисов яндекса на крестах, например.
Почему S вызывается из производного, а Z из базового, разве она не должна переопределяться?https://ideone.com/Sh0xc8
>>1502284> найди любого человека со студентческим билетом и на него оформи бесплатную лицухуГде-то это я уже видел... По-моему ты мне и отвечал несколько тредов назад. У меня нет знакомых студентов.
>>1502321> Все системное программирование, алле.Все системное программирование на Си, а не на плюсах, алло> Весь high-performanceРазве что в разработке игровых движков и чего-нибудь связанного с графикой. Распределенные системы и высоконагруженные сервера пилятся на том же Го, так как язык проще, безопаснее, скорость разработки гораздо выше и там есть горутины, каждая из которых весит 2 кб, что позволяет уходить в самый жесткий мультитрединг.Если честно, мне страшно предположить что случится с Си и плюсами, когда тот же Раст выстрелит и пустит корни в хайтек.
>>1502327> Все системное программирование на СиТы хотел сказать, все легаси говно из 90 на Си. Никто на Си уже не пишет. Да, даже жопные контроллеры программируют на плюсах.мимо
>>1502327> когда тот же Раст выстрелитТо есть никогда, лол. Как вообще связаны корутины с мультитредингом? Это разные вещи. В бусте они тоже есть, если что.
>>1502271обычно студентиков в вузах учат на си писать (это когда идут курсы по алгоритмикам и все такое)студентоз потом доучивает кресты и все, человечек в ловушке, подсел на технологический стек роботает потом за копеечки и все такое
Сап, плюсач.Хочу на крестах пилить сетевые приложения (с возможным уклоном в последующую разработку сниффера и/или пакет инжектора, для портфолио, так сказать).Есть два стула: QT Network и Boost.Asio. На какой сесть? В обоих чет не видел интерфейс для сырых сокетов. Что будет лучшим выбором?
>>1502271>Нахуя учить плюсы в 2к19, если любая вакансия на плюсах == разгребание легасиЧтобы разгребать легаси.
>>1502345вот я и говорю им, кому нахуй всрались сейчас плюсы? В их манямирке он нужен для перформанса, на деле в компаниях в 2к19 работает принцип "хуяк-хуяк и в продакшн". Софт говно порой выходит, базару нет, но это реалии айти на данный момент. Никто не будет нанимать плюсовика на бэкэнд, если его можно написать на ноде/го, где разработка будет х10 быстрее, без мемори ликов и тонны жопочасов отладки неведомой хуиты. Насчет роли плюсов в имбэддэде тоже очень сомневаюсь, там пишут на Си, напрямую дергая API ОС и не парятся, так как в имбэддэд разработке ООП вообще не нужно, ибо это байтоебство чистой воды, там тупо не нужны такие пласты абстракций. Плюсы в имбэддэд - это все равно, что из пушки по воробьям хуярить.
>>1502348не ломай себе жизнь, пиши подобный софт на Го. Потратишь во много раз меньше времени, сэкономишь нервы, не будешь получать сегфолты и утечки памяти направо и налево. Никто не использует плюсы для сетей в 2к19.
>>1502348> в последующую разработку сниффера и/или пакет инжектора, для портфолиоЕбу дал? Ты хоть знаешь как это работает и реализуется? Драйвера писать умеешь?
Пиздец, очередные мантры от первокуров. На С++ нигде не пишут, работы нет, пок-пок-пок, памагите с laba.cpp. Летом такой хуйни не было.
>>1502364Я на Си писал сниффер через сырые сокеты, в чем трабла. Да, это не второй уайршарк, но все же.Умею, но только хэллоуворлдные
>>1502367>уайршаркБлядь, нахуя вы это делаете? Тебе раскладку переключить выйдет быстрее чем нам прочесть эту хуйню.
>>1502372Зашел сейчас в репозиторий ядра линукса на гитхабе: C 96.5% , C++ 1.3%. Плюс слышал, что майкрософт когда то пытались перенести ядро своей ос на с++ и ооп подход и обосрались, потеряв много денег, ядро до сих пор на си. Торвальдс вот ещё всегда топил за си. Оно и логично, так как си создавался как портируемый ассемблер, си гораздо более легковесный язык, чем си++, поэтому абсолютное большинство низкоуровневых системных вещей написано на си. мимо
>>1502267>Купи vs2019Так он и стоит, в intellisense всё в перемешку, вот эту настройку уже покрутил, не помогает.
>>1502329огромная часть говна конкретно под линуксы на сишечке пишется до сих пор. почти все виндовсменеджеры-конпозиторы как один из примеров. не так давно на реимплементацию осома под вейланд, которую хотели на расте сделать, перекатили на си, поскольку не смогли в wlroots под раст (кусок с композитором по крайней мере, остальную часть будут в расте пытаться). собственно, разрабы которые пытаются в suckless обычно пытаются делать говно в си (ебонутые).
>>1502378Много подсистем майкрософта на крестах, собстно, пишем драйвер на С++17, все отлично, лучше, чем сишная блевота.Вполне возможно, что в 2000 си был выбором лучше, чем С++98 с зоопарком говна. Сейчас си не нужен вообще нигде.
>>1502382Я про этоhttps://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.VSIntelliCode
>>1502401> Именно поэтому винда мусор, лол)О, тут красноглазые дауны приехали. Ладно, с сектантами спорить - себя не уважать.
>>1502407Ля, виндузятник порвалсяКто юзает винду среди программистов? Дотнетчики и разрабы игр, ну и те, кто малвари ковыряют, лол90% разрабов сидят на юникс-лайк ОСях, винда - глючный, костылированный, неудобный мусор для прогера. Она годится только для домохозяек, ради которых и, собственно, разрабатывалась. Ну и для игродаунов.Цистерну бсодов тебе на ебало, короче))0
>>1502418напиши полноценный драйвер (сетевой или блочный, например) на крестах на Линукс, я поржу. И попробуй закоммитить его в мэйнтри, тебя обоссут быстрее, чем ты думаешь
>>1502401> Именно поэтому винда мусор, лол)> А на Линуксе на крестах невозможно писать драйвераНа линуксе невозможно Х, а мусор почему-то винда.Это тред си? Почему тут сиктанты?
>>1502427Потому что богоподобный Линукс написан на Си, как ты будешь писать кернел дрова для ядра, написанного на Си, НЕ на Си? Ты совсем что ли еба?)0 Да и вообще, писать кернел на плюсах с его темплейтными оверхедами в участке памяти, где нет пэйджинга (кернел спейс) - такая себе затея. Кресты СТРОГО не подходят для написания ядра, особенно, если надо создать реально шуструю и лаконичную ОС, а не ебучего Франкенштейна
>>1502420да, да, дурачок, мы все поняли уже. Можешь дальше обмазываться своим дерьмом и кукарекать на параше.
>>1502431> Потому что богоподобный Линукс написан на Си, как ты будешь писать кернел дрова для ядра, написанного на Си, НЕ на Си? Ты совсем что ли еба?)0 Нет, я не "еба", мне интересно, почему нельзя.https://stackoverflow.com/questions/10469188/is-it-possible-to-develop-a-loadable-kernel-module-lkm-on-linux-with-cПочему тут нужен какой-то интерфейс? Почему недостаточно >>1502439? Ты же не хочешь сказать, что это должно быть НУ ПРОСТО ОЧЕВИДНО каждому, кто может баблсорт написать? Впрочем, зная, какие люди посещают этот сайт, ты вполне можешь оказаться из таких и даже найти единомышленников (которые могут быть как реально умными людьми, способными объяснить почему, так и просто уебанами, которые сами не знают, а просто услышали и повторяют).
Подскажите студенту - долбоебу.Делаем for(;iterator!=list.end(); ++iterator ) по итератору в листе, и когда находим определенный элемент пишем такую йобу: list.insert(list.erase(iterator), "data");Так вот, почему после этого цикл по итератору спокойно продолжает идти дальше, если элемент, на который итератор указывает, уже стёрт?
>>1502326Оформись на stepik.org.Там за прохождение курсов дают 3 месяца idea и resharper, кончится - запишись на ещё курс, пройди немного и получишь ещё лицензию.
>>1502513Я вообще думаю, что ты словил UB, т.к. вообще итератор инвалидироваться должен после такой операции.А так - ты понимаешь, как удаляется элемент списка? Ссылке на следующий элемент предыдущего присваивается следующий элемент текущего, а для текущего вызывается деструктор данных.То есть твой итератор указывает на удаленный объект, который внутри себя хранит ссылку на следующий. Делаешь operator++ и итератор перескакивает на следущий, только он теперь стал текущим.Хотя, по идее, твой итератор должен был указывать на текущий элемент, а текущий теперь - это следующий за удаленным, и после operator++ ты должен был его проскочить.Попробуй сделать cout для каждого и посмотреть, что выводится.
>>1502534Хрен его знает, пропозал n1692 датирован 2004 годом. И я слышал много разговоров про wide_int. Видать недостандартизировали
>>1502513если у тебяiterator = list.insert(list.erase(iterator), "data");То все валидно.Если именно то, что ты написал - то это UB
>>1502513>list.insert(list.erase(iterator), "data");непойму зачем ты так делаешьразве не проще просто изменить значение элемента на который указывает итератор?
>>1502563Да, просто игрался с мемберами контейнеров и набрел на такое.>>1502550Видимо UB, тогда.>>1502546В этом и вопрос, что он указывает на удаленный элемент, и всё равно выполняет инкремент на следующий правильно. Вроде ничего не перескакивает, скрин прилагаю.
>>1502568>Выполняет ... правильноТак итератор же не в курсе, что он ссылается на удаленный объект. А так как это UB, то он инкрементируется правильно в твоей ситуации.Попробуй в дебаге скомпилить, там есть валидация итераторов, стандарт обещает вызвать std::terminate в такой ситуации.Либо попробуй другой компилятор, может быть другой результат
Продристалися всем офисом с линуксошизика итт. Ага, дрова не пишут на С++, лол блять! Темплейтный оверхед вообще пушка.Покормил очевидного тролля
>>1502439Тсс, а то вдруг он сейчас загуглит, как работает линковщик и догадается, что можно еще и ассемблерные спагетти в проект подцепить.
>>1502575хм, и как это меняет ситуацию?указатель на константные данные это тебе не константный указатель вообще то
>>1502585Продолжу вопрос линуксошизика: а рили, как писать дрова на линупс на крестах? И надо ли? Если захочешь его законтрибьютить, то рили же нахуй пошлютмимо растоеб
>>1502604Написатт реально, как и на расте. А вот принятие надо с красноглазиками обсуждать. Винда в этом плане мудрее, достаточно драйвер только подписать
>>1502611А как именно? Ибо в гугле расплывчатая инфа по сабжу, или это я спать хочу просто и засим ебусь в глаза
>>1502615https://github.com/veltzer/kcpp мне кажется ок инфаРасскажу по своему опыту про шинду - надо тупо несколько функций типа DriverEntry помаркать как extern C, все. Дальше, делай что хочешь без стандартной библиотеки.хоть шаблоны, хоть лямбды, хоть if constexpr, хоть structured биндинги
>>1502627не думаю. Только за RAII уже можно си выкинуть на помойку и не вспоминать больше никогда и нигде.
>>1502580анон, если ты уверен в своей точке зрения, то говори её полностью и прямо, а не ограничивайся пассивно-агрессивными подпиздываниями и всякими намеками.
>>1502398С ней не лучше, хотелось бы чтобы именно члены класса были первыми, а не всякий срач с каких-то .h файлов.Как вы с этим живёте? IntelliSense для C# в разы лучше работает.
>>1502577Всё, разобрался. vector::eraseRemoves from the vector container and calls its destructor but If the contained object is a pointer it doesnt take ownership of destroying it. (Хоть тут и для вектора, я думаю оно работает аналогично и для других контейнеров)https://stackoverflow.com/a/6353169/7711537
>>1502742C# вообще говно для макак, как можно пользоваться таким неудобным говном, которое с собой ещё и гроб в виде object таскает.
На связи ваша любимая вниманиеблядь из Нвидии.Сходил на собес в Московский хуавей по фану, на сениор крестомакаку. Слышал про кучу обещаний золотых гор, что хуавей платит. На деле:Все числа без вычета 13%, т.е. на руки меньше.Зарплата - 260к ежемесячно. Если ты работаешь лучше, чем 5% конченых долбоебов - еще 2 зарплаты ежегодно. Если лучше, чем 50% долбоебов - еще 1 сверху, итого 3. Если лучше, чем 95% долбоебов, еще одна - итого 4.Sign-on бонус - 1 зарплата.Короче, ожидал сильно большего, такие делы.
>>1502926Не помню, чтобы были мидловые крестовакансии, но, в любом случае - тебе нужно только идеальное знание С++, включая С++17, т.к. мы пользуемся самыми последними фишечками, и стабильно переезжаем на новые компиляторы\стандарты.
Двачик, насколько адекватно делать поля класса ссылками на объекты? Именно ссылками, не указателями. Лично меня это повергло в дичайший шок, я даже не задумывался, что так можно делать.
>>1502904>Что там делать то, string поддерживает индексацию, дальше элементарноА на C# я просто пишу String.Split() и получаю нужное. Элементарная разбивка строки на подстроки в плюсах это боль.В общем на мой вопрос никто так и не ответил, а жаль.
>>1502964>Элементарная разбивка строки на подстроки в плюсах это боль.Нет никакой боли, обычный split как раз обычно не совсем подходит и тогда в шарпах приходится писать какие-то костыли через indexof, когда в плюсах можно удобно всё сделать и потратить намного меньше ресурсов.
>>1502971>обычный split как раз обычно не совсем подходит и тогда в шарпах приходится писать какие-то костыли через indexofВ этом то и суть, когда не подходит то пишешь что тебе там удобно. В 99% случаев достаточно функционала из коробки.>>1502972Миллоны программистов в миллионах проектов каждый раз пишут функцию из 10 строчек. Вместо ёбанных рейнджей охуеть блять begin() end() просто спрятали лучше бы сплит сделали.
>>1502980Вот как раз Split из коробки говно, сколько раз не юзал, всегда было проще самому написать, чем ебаться с ним.
>>1502984Я просто недавно начал в него вкатываться и боюсь как бы не остаться никому не нужным с ним. Что скажешь по поводу GDI+?
>>1502983Факт в том что он есть, и не надо писать что-то своё каждый раз. Стандартная либа плюсов очень ограничена по сравнению с шарпом.
>>1502989>Стандартная либа плюсов очень ограничена по сравнению с шарпом.Что ты подразумеваешь под стандартной либой? Шарпы тебе сразу всё говно тянут, в плюсах всё разбито по нужным блокам. Буста и Стл хватит с головой чтобы покрыть все функции из библиотеки шарпов. >Факт в том что он есть, и не надо писать что-то своё каждый раз.Пиздуй тогда в джаваскрипт, там как раз уже всё написал за тебя, только будешь функции вызывать.
>>1502988>GDI+?Не нужно, когда есть OpenGL, Direct2D\Direct3D. Но в любом случае, я больше по вещам типа файловой системы, и прочей системной херне, а не графончику. Специфика команды.
>>1502991>Шарпы тебе сразу всё говно тянут, в плюсах всё разбито по нужным блокам.Точно так же всё разбито на отдельные части.>Буста и Стл хватит с головой чтобы покрыть все функции из библиотеки шарпов. Буст таки не входит в стандартный комплект.>Пиздуй тогда в джаваскрипт, там как раз уже всё написал за тебя, только будешь функции вызывать.Хуйли ты злой такой? Или о плюсах как о мёртвых надо - или хорошо или ничего?
>>1503010На всякий случайРаз они косплеят функции, то пусть будут максимально на них похожи, чтобы меньше деталей запоминать - например за этим
И что это вообще за хуета с захватом локальных переменных? Почему бы просто разрешить доступ сразу ко всему из внешнего скоупа?
>>1502750таки лучше было бы чтобы ты вместо сырых указателей в своем списке использовал unique_ptrа то что ты делаешь, делал бы через обычное присваиваниетак было бы меньше вероятности что ты отстрелишь себе ногу
>>1502896>Ну ка сделай мне split строчки без ебли на плюсах.Boost tokenizerилиBoost String Algorithms - split
>>1502897ты зажрался, дружокдаже 200к, даже в дс - просто заоблачные деньги, просто деньги которые решают все проблемы..
>>1503090Тащить огромную либу ради функции, которая во всех нормальных языках есть из коробки. Плюсы такие плюсы
>>1503004потому что основное применение лямбда функции - сконструировать ее по месту и сразу передать на выполнение
>Байтойобство здесь — https://gcc.godbolt.org/ все очень удобно оформлено даже для нюфагов, куча версий компиляторов, дают тыкать настройки ручками — ляпота короче.А есть такой же сайт для байткода джавы?
>>1503046потому что лямбды в крестах пытаются косплеить замыкания в функциональных языкахно, конечно же, следуюет помнить что лямбды у нас таки не полноценные замыкания и мы не можем делать на них те штуки что делают в языках лисп-семейства
>>1503098ты троллишь что ли?ну дык напиши тогда свою функцию токенизации на stringstream, она будет размером строк в 10
>>1503111был бы твоим манагером, тебя бы выгнал на мороз, набрал бы на твое место 3х бородатых синьоров-помидоров за 120к и еще бы на пару стажеров денег хватило
>>1502623> Дальше, делай что хочешь без стандартной библиотеки.Можно и с ней, только придется переопределять всякие new/delete и прочее.
>>1503111Ай пиздабол, нет таких зп в ДС, даже в срунвидии. Да и выше ты писал, что хуйней какой-то занимаешься, а не конкретно дрова пилишь. Врёти.
>>1503114Я сам в ахуе, серьезно.>>1503115Хех, друг. У нас больше года была открыта вакансия на тот же грейд\зп, что и у меня. Хуй кто прошел, причем сильно не валили.
>>1503120> больше года была открыта вакансия на тот же грейд\зп, что и у меня> Хуй кто прошел, причем сильно не валилиА вот тут пиздишь точно
>>1503123Я персонально собесил людей, и потом фейспалмил, когда приходят додики, хотят 300 тысяч зарплаты, и даже не знают, что такое вариадик шаблон. Или там арифметику указателей сложнее чем инкремент указателя не знают. Про что-то адванцед, типа мув семантик вообще 2 человека рассказали за год (собстно, их и наняли, сидят рядом со мной, но вакансий было штуки 4, насколько я помню).
>>1503128>типа мув семантик вообще 2 человека рассказали за годВот тут поддвачну, из кучи собеседуемых мной людей об этом человека три рассказали. И то пиздец как обзорно есть подозрения, что они просто смогли перевести слово move на русский язык
>>1503136Друг, ты идешь на вакансию со стартовой зарплатой 280-300к на руки. Ты на эти деньги мне должен обьяснить как это все работает, написать простенький move-only класс, и обьяснить, в идеале, еще и про forwarding reference. Звучит сложно, но на деле - это пара десятков страниц из книги Скотта Майерса про модерновый сиплюсплюс. И да, мы это активно используем в коде, а не доебываемся потому-что можем.
while(r){ r>>temp;r - istrinstream, проблема в том, что while исполняется на 1 раз больше чем слов в строке, почему?
>>1503140>Ты на эти деньги мне должен обьяснить как это все работаетА хули тут рассказывать то? Просто же компилятор может взять и скопипастить данные из другого класса не делая при этом deep copy и оставляя перемещаемый объект в невалидном состоянии. Все временные объекты ||они справа обычно от знака = || rvalue.> move-only классstruct A {A(&&) = delete;A operator= (A&&) = delete;A (const A&) { /do something/ }A operator=(const A&) { /do something/ }}Оно что ли?
>>1503150Это только один вопрос из многих. Все что мы требуем - знание С++, не более. Но его вообще почти никто не знает, только какие-то куски, понимания вообще нет у среднего претендента на сениор девелопера. Ну и да, мы требуем модерн, как я выше писал. Если ты в 2019 году остановился на С++11, ну, сорьки, что еще сказать. Мы переедем на С++20 как только студия начнет его поддерживать.
>>1503152>А хули тут рассказывать то?Вот ты не поверишь, даже этого добиться от среднего претедента уже проблема.> move-only классНу, подразумвается, что есть какой-то ресурс еще, который надо переместить. Например хэндл, или указатель, или что-то еще тривиально-не-копируемое.
>>1503157> Ну, подразумвается, что есть какой-то ресурс еще, который надо переместить. Например хэндл, или указатель, или что-то еще тривиально-не-копируемое.Ну это прям жуть как сложно. мегапримитивный unique_ptr
>>1503175да, но он более-менее комфортный нет гигантских пространств, тупо 1 очень вытянутая комната на каждом этаже.
>>1503171Млять, серьёзно что ли люди, которые идут на позицию сеньера с зп в 400К не могут написать такое? Мне сейчас с моей зп в 30к стало просто неимоверно обидно
>>1503184Все настолько плохо, на полном серьезе. Но, я повторюсь, это далеко не единственный вопрос с собеса.
>>1503186>Все настолько плохо, на полном серьезе. Но, я повторюсь, это далеко не единственный вопрос с собеса.Можешь ради интереса кинуть 1-2 самых сложных лол
>>1503187Просто это не Москва и не город-миллионник. Когда я был джуном, то зп вообще была 17к не знаю, почему я не уехал никуда
>>1503188написать вариадик тимплит, который принимает кучу разных чисел (все беззнаковые, но разные по размеру), возвращает их сумму, и падает со статик ассертом, если хоть что-то из аргументов не число. Но это бонусный вопрос. Смог написать 1 из двоих нанятых.
>>1503188еще многопоточку спрашиваем (обожаем ее), ну и вообще, дефолтные вопросы за эксепшены\полиморфизмынаследования. Так то, ничего сложного, если ты не отстал на 10 лет от тренда.
>>1503198я по памяти напишу за минуту на доске. Алсо, давали гуглить в качестве эксперимента - все равно не писали.
Аноны, а в ваших коллективах есть люди с проблемами речи? Как к ним относятся, влияет ли это на продуктивность?
>>1503193> написать вариадик тимплит, который принимает кучу разных чиселТы сейчас серьёзно? Это типа сложно да ещё и с гуглом?Писал по памяти (давно не пользовался, на работе чертовы деды на 11 сидят).В 17 можно ещё проще, но я не вспомню точно синтаксисЧто-то типа такогоtemplate<typename T, typename... Args>auto sum(T a, Args ...args){return args + ... + a;}Но вот тут я затрудняюсь сказать, как static_assert'ом чекнуть все значения
>>1503207ПМ картавит, старший разраб заикается, я (тимлид) часто чрмлагтсаарлмпоордзж говорю или что-то подобное, когда параллельные мысли в голове. Всем пох.Шипилявого тестера травим
Стоит устраиваться джуном за 45к? Думаю год поработать и свалить. О компании пишут, что она говно и работают там в основном студенты без опыта, которых она и эксплуатирует.
>>1503240Ну не должна, но если других вариантов нет, то пусть работает. Уйти можно всегда. А так хоть будет что заявить на следующей. Так что да, стоит, если нет других вариантов
>>1503216Для варианта со сверткой можно if constexpr сделать, я думаю. Компайл-тайм как раз, под условия подходит. Свёртка же, кажется, не требует одного только return в теле функции.Кстати, нвидианон, а нужна функция, которая съедает слагаемые аргументами функции, не аргументами шаблона?Можно же написать sum<1, 2, 3, 4, 5, 6>::value, по аналогии с компайл-тайм факториалом, насколько я понял шаблонную магию.
>>1503326Пометка к первому абзацу: смотрел лекции Хандельянца(который главный разраб pvs studio), он сказал, что способ из C++17 потом компилятором разворачивается в тот код, который у тебя на скрине. То есть, достаточно проверить параметр "а" на беззнаковость, по идее.
>>1502963Конечно можно. Только следи за временем жизни, чтобы объект по ссылке не удалился раньше класса, в котором он используется.
>>1503325це ide - Visual Studio Code. Ничего, кроме как синтаксис подсвечивать , она не умеет. Об анонах забочусь, чтоб они не мучились, читая чёрно-белый код
>>1503342То что можно - это понятно. Вопрос больше в том, насколько это нормальный подход. По моему это в разы хуже, чем юзать указатели. Шанс получить dangling reference точно такой же, как и удалить объект по указателю где-то и получить указатель на невалидную память
>>1503326>Для варианта со сверткой можно if constexpr сделать, я думаю. Компайл-тайм как раз, под условия подходит. Свёртка же, кажется, не требует одного только return в теле функции.Как то я вообще не могу понять, как ты сюда хочешь if впихнуть
>>1503329CRTP и тот же самый variadic template ты обязан понимать, type_traits туда же, forwarding туда же, на всякий случай ещё boost::mpl/mp11/fusion/hana должен пониматьмимо другой аное
>>1503179Это же наоборот уебанство, лучше пусть коллеги подальше сидят, чтобы я их пердёж не слышал а они мой
>>1503329Да, но немного. Каждому инструменту свое место применения, и мы не перебарщиваем с этим.>>1503326Иф констэкспр тоже можно, если ты вариадик хочешь без перегрузки на конец рекурсии делать
>>1503357> По моему это в разы хуже, чем юзать указатели.Это в разы лучше.>Шанс получить dangling reference точно такой же, как и удалить объект по указателю где-то и получить указатель на невалидную памятьШанс получить висящую ссылку нулевой. Нужно просто™ следить за временем жизни своей хуйни.Если ты не можешь проследить за временем жизни - то у тебя нихуя не получится даже с указателями.
Нахуя так много говна на цппкон залили? Теперь придется рыться в этих сотнях видео и искать годноту, пиздец! Может кто-то выделил для себя чьи-то выступления? Кидайте сюда.
>>1503382> Нужно просто™ следить за временем жизни своей хуйни.Точно такая же ситуация и с указателем. Надо просто™ следить за временем жизни своей хуйни а лучше забыть об этом говне и взять std::shared_ptr
>>1503393Пояснишь? В данном случае разница между ссылкой и указателем в том, что ссылка всегда на что-то ссылается (не факт, что на что-то валидное, ибо никто не мешает хуйнуть в неё объект, которой впоследствии разрушится при выходе из scope) и её не нужно уничтожать, ибо за объект отвечает кто-то другой.С указателем точна та же херня. Его можно забыть инициализировать или можно разрушить объект, на который он указывает. И кто-то должен удалить его. Возможно кто-то другойКаких-то явных преимуществ ссылок вообще не видно. А недостаток - крайняя неочевидность того, что конструктор класса или метод принимает ССЫЛКУ, которую потом ещё и хранит.shared_ptr решает все эти проблемы. Его хуй сделаешь невалидным и не нужно следить за его уничтожением. Чекать ifом его элементарно. Да, можно с пеной у рта орать, что его копировать медленно, но эти несколько наносекунд от нескольких копирований никакой роли не сыграют
>>1503407А ещё в каком-то из тредов видел, что написанная с shared_ptr программа - нездоровая, что ее можно переделать на unique_ptr и победить проблемы.Но это неточно, только слухи.
>>1503412А где вообще может возникнуть необходимость ссылаться на один объект сразу нескольким господам? Многопоточка?
ПЕРЕКАТ >>1503420 (OP)ПЕРЕКАТ >>1503420 (OP)ПЕРЕКАТ >>1503420 (OP)ПЕРЕКАТ >>1503420 (OP)ПЕРЕКАТ >>1503420 (OP)
>>1503416ну смотри: есть несколько пользователей ресурсакак только пользователей этого ресурса не станет или он им больше не понадобится, ресурс уничтожаетсявот и все
>>1503231>Все настолько плохо на рынке труда нынче.обычные голодные игрыкапитализм хулеодин выжил, получает свои 300к и ему заебисьостальные как крысы забились в свои норы, откуда они попытались вылезтьили уже здохли к 30ти-40ка годампричем молча
>>1503401Ты непробиваемый. Если в коде я вижу ссылку, значит я могу быть уверен, что объект не разрушится, пока живёт этот класс. Если я вижу указатель, значит стоит ожидать, что какой-нибудь уёбок может сделать его невалидным.Самый простой пример: нужно вывести в диалоге список лучших аниме тайтлов, т.е. сформировать список -> создать диалог -> установить ему список -> показать. Предлагаешь делать shared_ptr<vector<T>>? Или может передавать туда T★?99.9% всех потребностей любого крестовика - это создать объект на стеке/через make_unique и передавать ссылку на него.Почитай на досугеhttps://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#rsmart-smart-pointers
>>1496995Вот это '->' и это '().' одно и тоже, следовательно ты делаешь ((t_).f_)(args ...) Ты обращаешься к члену c именем f_ типа сласса t_
>>1503642Меня больше удивляет зачем они на сеньоров приходят собеседоваться. Тут в чатах сеньоры устройство процессора и ОС знают на приличном уровне, математическую базу имеют и 10+ лет опыта, а у этого анона приходят полумидлы видимо с надеждой что прокатит, я хуй знает как это еще можно обьяснить.
>>1503657А ещё потому что хуй его знает, когда ты джун, миддл или сеньор.Я изучаю плюсы для себя, смотрю лекции/читаю книги/практикуюсь/пишу мелкие утилиты на работе, вроде знаю уже много(лол), но на джуна не потяну - нет опыта.Более того, я на основной работе имею знания сеньора(судя по тому, как у нас собеседуют на эту вакансию, прошел бы собес), но опыта работы полтора года и максимум тяну на миддла, потому что одних знаний мало. Странная вообще градация, как по мне - но другой нет.
>>1503696Ну так мало знать язык, надо еще и уметь навыки работы в продакшене. Можешь быть хоть братом Дурова, если ты будешь тратить полтора месяца чтобы написать охуительно быстрый йоба-боба рест-сервер просрав все дедлайны, то бизнесу ты нахуй не нужен, наймут пхп макаку которая твою задачу сделает за неделю и всё.