Программирование


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
716 44 178

C++ №95 /cpp/ Аноним # OP 09/10/19 Срд 18:13:13 14924421
image.png (350Кб, 600x350)
600x350
Аноним 09/10/19 Срд 18:14:47 14924442
Почему все до сих пор пишут классы в С++, разделяя хэдер и реализацию? Это все из-за наследия сишки или имеет какой-то сакральный древний смысл.
Аноним 09/10/19 Срд 18:16:17 14924453
>>1492424

type* - это же именно отдельный тип данных, следовательно, лучше относить его к первому варику.
Аноним 09/10/19 Срд 18:53:24 14924644
Что означает комбинация int &Arr? Я понимаю что это такое по отдельности и частично вместе, но как работает &?
Аноним 09/10/19 Срд 18:59:24 14924735
>>1492464
Ты не знаешь что ссылка значит, или что?
Аноним 09/10/19 Срд 18:59:52 14924756
>>1492464
Ну, как бы имелось в виду int *&Arr.
Аноним 09/10/19 Срд 19:01:31 14924807
Стоит юзать вектор или можно обойтись в принципе пацанским выделением динамического массива в проде? Какие подводные у обоих вариантов.
Аноним 09/10/19 Срд 19:01:33 14924818
>>1492473
Я понимаю как примерно работают ссылки и указатели по отдельности, я даже понимаю что значит *a = &b, но вот эту штуку я вижу впервые и не могу нагуглить что это.
Аноним 09/10/19 Срд 19:01:42 14924829
>>1492475
Ссылка на указатель?
Это та же ссылка, только на указатель.
вроде как, впервые вижу чтоб вобще кто то так писал
Аноним 09/10/19 Срд 19:04:51 149248510
>>1492482
>Ссылка на указатель?
Может это как ссылка от указателя на целочисленный тип? То есть это может пригодится при работе с массивом (не ебу как, но может).
Аноним 09/10/19 Срд 19:28:17 149251611
image.png (124Кб, 1351x753)
1351x753
Какого хера автор говорит, что пользователь не сможет НАПРЯМУЮ работать с этими переменными? Какая разница, сделано это через геттеры и сеттеры или просто через публичную переменную, все равно доступ такой же. Я, блять, не понимаю нахуя это тут. В джаве это понятно зачем городить, но в кресты ЗОЧЕМ.
Аноним 09/10/19 Срд 19:28:40 149251712
М о д у л и
о
д
у
л
и
Аноним 09/10/19 Срд 19:31:54 149252313
>>1492516
Когда ты пишешь один, то наверное незачем. А если несколько человек, то у каждого своя задача и кто то может написать одну часть программы, а другой использовать ее не вникая в то как оно работает, и взаомодействовать с ней с помощью геттеров и сеттеров.
Аноним 09/10/19 Срд 19:33:10 149252514
>>1492523
Ну, так, если он получает значение просто публичной переменной, то он тоже особо не будет вникать.
Аноним 09/10/19 Срд 19:36:28 149252815
>>1492516
Публичные переменные не нужны. А ещё может понадобиться потокобезопасность, тогда с методами можно сделать так, чтобы было последовательное выполнение при одновременных вызовах.
Аноним 09/10/19 Срд 19:39:06 149253016
>>1492444
И Н К А П С У Л Я Ц И Я
Н
К
А
П
С
У
Л
Я
Ц
И
Я

Это такая тонкая перекличка байтойобушков?
Аноним 09/10/19 Срд 19:41:02 149253417
>>1492516
Тут это нахуй не нужно. Видимо имеется в виду что в нормальном классе будут проверки дат на валидность.
Аноним 09/10/19 Срд 19:41:52 149253718
>>1492530
> Это такая тонкая перекличка байтойобушков?
> C++ №95 /cpp/
А ты толковый.
Аноним 09/10/19 Срд 19:42:56 149253919
>>1492525
Возможно, что прежде чем записать значение в переменную нужно это значение обработать. Например проверить чтобы значение лежало в определенном диапазоне, а если нет, то привести значение в необходимый вид.
Аноним 09/10/19 Срд 19:43:35 149254020
>>1492530
Вот, сука, нигде такой хуйни нет, но в с++ есть.
Я имею ввиду ТАКАЯ инкапсуляция посредством хэдеров.
Аноним 09/10/19 Срд 19:49:28 149254721
>>1492444
А что с этим не так? Поясните, я правда не знаю, плохо знаком с другими языками. Как по другому инклюды делать? Тебе же не нужна вся реализация, она в библиотеках, тебе нужен только интерфейс.
Аноним 09/10/19 Срд 20:01:27 149255322
>>1492444
>Это все из-за наследия сишки
Yes.
>имеет какой-то сакральный древний смысл
Tut tozhe yes. Правда не древний нихуя.

Во-первых, потому что в плюсах всё ещё нет модулей (выйдут в 20 версии, уже утверждены), и хэдэры подставляются как есть — текстом. Каждый #include — это просто текстовая подставка, которую надо парсить по новой. В более новых языках есть модули и код всегда парсится только 1 раз.
Во-вторых, а где ты реализацию с интерфейсом-то в куче видел? В го и скриптовых яязыках?
Аноним 09/10/19 Срд 20:18:15 149256123
>>1492553
>Во-вторых, а где ты реализацию с интерфейсом-то в куче видел?
Разве в джаве не так? Ты же не делаешь джва файла на класс.
Аноним 09/10/19 Срд 22:28:33 149265824
>>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 там где требуется и это звучит как залупа.

По моему я какой то хуйней заморачиваюсь, но для меня важно.
Аноним 09/10/19 Срд 22:46:47 149267325
Аноним 09/10/19 Срд 22:47:20 149267426
>>1492658
ой бля, прости анон, только сейчас до конца дочитал
Аноним 09/10/19 Срд 22:52:05 149268027
image.png (381Кб, 606x467)
606x467
>>1492674
Извиняю.
Извинения на двачах, кек
Аноним 09/10/19 Срд 23:14:21 149269428
>>1492680
В Чечне на каком стандарте сидят, интересно.
Аноним 09/10/19 Срд 23:25:16 149269829
>>1492694
На не имеющем аналогов.
Аноним 09/10/19 Срд 23:27:45 149269930
>>1492658
Хедер с интерфейсом или хотябы с функцией, возвращающей некий указатель, а имплеменатцию и сами глобальные переменные внутрь некого си файла.

Пользовался этим в С++, когда на С++14 сидели, экстерноговно не кушай
Аноним 09/10/19 Срд 23:32:08 149270231
изображение.png (136Кб, 1366x768)
1366x768
Помгите, прошу. Какие настройки вам показать? Что не так? Почему все красное? Соре за paint. Он какого то хуя заис тут
Аноним 09/10/19 Срд 23:36:22 149270332
>>1492699
Нету у меня возможности использовать функцию - нет inline по стандарту, а компилятор дурной очень, не хрена не факт, что догадается разворачивать геттер.
И нет дизасм не хочу не буду смотреть

Чем extern так плохи?

>>1492702
Вот заодно анону помогу.
То, что в солюшен эксплорере это файлы, которые будут собираться в объектные.
Хидеры будут игнорироваться, ты можешь их туда пихать для удобства, но программе они не будут известны.

А что бы инклудить хидеры, ты должен указать где их искать, это делается обычно
Настройки проекта -> Include Directories или что то такое, там название и место в MVS из года в год меняется.
Аноним 09/10/19 Срд 23:37:01 149270433
изображение.png (142Кб, 1366x768)
1366x768
>>1492702
Я наконец то получил ошибку прямым текстом, скомпилив ранее работающий проект
Аноним 09/10/19 Срд 23:39:28 149270534
>>1492704
Хотя мне кажется что эта ошибка не имеет ничего общего с той. Короче ебаная вижуал студия. Я просто обновил ее
Аноним 09/10/19 Срд 23:39:48 149270635
изображение.png (197Кб, 1366x768)
1366x768
Аноним 09/10/19 Срд 23:42:37 149270836
>>1492705
Не хочу линукс, говорили они. Пердолинг, говорили они
Аноним 09/10/19 Срд 23:45:26 149271237
>>1492703
>нет inline по стандарту
тебе не нужно инлине, у тебя обычная функция самая, определение которой в трансляционном юните. Что-то в духе:

--------------
zalupa.h

int get_var();
int set_var(int val);

--------------
zalupa.cpp

static int g_var = 0;

int get_var() {
return g_var;
}

void set_var(int new_var) {
g_var = new_var;
}

--------------
За синтаксис не ручаюсь
Аноним 09/10/19 Срд 23:48:28 149271438
>>1492703
>нет inline по стандарту
Аноним 09/10/19 Срд 23:51:16 149271739
>>1492703
>нет inline по стандарту
Inline не инлайнит функции. Это ключевое слово позволяет делать так, чтобы компилятор не ругался на multiple declarations одной и той же функции при инклудинге хедера, когда эта функция описана в самом хедере.
Сам инлайн только на усмотрение компилятора. Более того, даже аттрибуты типа _____forceinline_____ уже давно игнорятся компиляторами, потому что их лепят где попало.
Аноним 09/10/19 Срд 23:54:36 149271940
>>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++;
}
Аноним 09/10/19 Срд 23:57:03 149272141
изображение.png (106Кб, 1366x768)
1366x768
Держу в курсе
Аноним 09/10/19 Срд 23:58:56 149272542
А правильно так.

//module.h

typedef int error;

typedef struct {
int ciferka;
} module_context;

void module_create(module_context@@ yoba);

//module.c

ERROR module_create(module_context@@ yoba) {
*yoba = malloc(sizeof(module_context));
yoba->ciferka = 1;
}

//main.c

int main() {
module context yoba;
if (!module_create(yoba)) {fprintf(stderr, "Беда, капитан");exit(-1);};
}

Либо - в следующем посте
Аноним 09/10/19 Срд 23:59:08 149272743
>>1492721
В рот ебал все это. Тупо версия qt не выбирается. И ЭТО НА РАБОТАЮЩЕМ НЕДАВНО ПРОЕКТЕ
Аноним 09/10/19 Срд 23:59:30 149272844
>>1492727
win32 попробуй выбрать
Аноним 10/10/19 Чтв 00:00:29 149273145
>>1492728
А может быть такое, что mscv 2017 а студия 2019?
Аноним 10/10/19 Чтв 00:01:03 149273346
>>1492731
Всмысле у меня так и есть. Может ли ошибка поэтому быть?
Аноним 10/10/19 Чтв 00:01:37 149273447
>>1492733
Может быть надо пересобрать qt, либо в msvc указать старый компилятор. ЗАТО НЕТ ПЕРДОЛИНГА
Аноним 10/10/19 Чтв 00:03:22 149273748
А за такое тебя сразу возьмут мидлом.

//module.h

typedef 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.c

int main() {
module_context yoba;
if (!module_create(yoba)) {fprintf(stderr, "Беда, капитан");exit(-1);};
}
Аноним 10/10/19 Чтв 00:07:25 149274449
>>1492731
может, в 2019 студии можно ставить тулчейны от 17 и 15, и собирать ЛЕГАСНЮ.
Аноним 10/10/19 Чтв 00:11:40 149275050
>>1492744
Я честно говоря запутался. За что вообще отвечает msvc. Еще странно, что все работало на 19 версии, но после какого то обновления сломалось. Поможет ли, если я снесу все и заново установлю?
Аноним 10/10/19 Чтв 00:14:23 149275351
>>1492706
Ты обновился с 2017 на 2019? Для 2019 нет предсобранного msvc компилятора в Qt. Ставь 2017 build tools через установщик/настройщик студии, тогда будет валидно.
Аноним 10/10/19 Чтв 00:15:53 149275552
Аноним 10/10/19 Чтв 00:16:27 149275653
Там типа 141 build tools тебе надо. Вместо 142. Но тогда и проект должен быть для этой версии, старой, не апгрейдь.
Аноним 10/10/19 Чтв 00:17:20 149275754
Не апгрейдь проект в смысле до 2019, оставляй его в режиме 2017.
Аноним 10/10/19 Чтв 00:17:45 149275855
>>1492755
Вообще нужно приучить себя не обновлять виндовые приложения сразу. У меня однажды сама винда полетела после своего же официального обновления
Аноним 10/10/19 Чтв 00:17:51 149275956
>>1492750
я бы на твоем месте вообще не пользовался студийным тулчейном в твом случае. Накати mingw через QT инсталлер, и пользуйся им.

Ну или полноценно девелопи в студии с qt tools.
Аноним 10/10/19 Чтв 00:18:20 149276057
Аноним 10/10/19 Чтв 00:19:29 149276158
>>1492717
> Это ключевое слово позволяет делать так, чтобы компилятор не ругался на multiple declarations одной и той же функции при инклудинге хедера, когда эта функция описана в самом хедере.

Интересно надо будет почитать, всегда считал что как рекомендация к развертке работает.

>>1492712
Я к тому и пишу, есть шанс что конкретно мой тупой компилятор ее не развернет.
А мне очень желательно, что бы просто была изменена ячейка памяти, без джампов.

И сейчас все таки посмотрел дизасм - хуй, не разворачиваются геттеры из одной команды.

>>1492719
>>1492725
>malloc
Out of memory лол

Это вся хуйня в контексте байтоебства, я в начальном посте написал, мне нужно получить прямое обращение к ячейки памяти, на выходе.

Я люблю в хедере описывать дефайны и тайпдефы, после чего инклудить их в *.с и его же инклудить в проект.
Это разве нихуя не правильный подход?

>>1492725
Вот конкретно тут, у тебя тайпдеф в хедере, но этот же тип используется в .с файле, куда хедер не заинклужен.
Оно на хуй не должно послать разве?

>//какой нахуй int здесь, поехавший
Опечатка же
Аноним 10/10/19 Чтв 00:24:03 149276359
>>1492761
В догонку, мне не нужна переменная в main, она мне нужна в других модулях, которые будут на основе этого.
И очень удобно иметь один ебучий хедер, который ты пихаешь куда надо.

Макароны? Безусловно, но лучше чем видимые везде, тут хотя бы видишь что используется.
Аноним 10/10/19 Чтв 00:26:45 149276660
>>1492761
>Я люблю в хедере описывать дефайны и тайпдефы, после чего инклудить их в *.с и его же инклудить в проект.
>Это разве нихуя не правильный подход?
Нормальный подход
>Вот конкретно тут, у тебя тайпдеф в хедере, но этот же тип используется в .с файле, куда хедер не заинклужен.
>Оно на хуй не должно послать разве?
У меня дохуя опечаток, это одна из них
>>1492763
>И очень удобно иметь один ебучий хедер, который ты пихаешь куда надо.
В хедере extern'ы, то есть декларейшен, в соответствующем модуле - дефинишены без экстернов. И все будет работать. Так ине понял зачем тебе делить хедер на два.
>И очень удобно иметь один ебучий хедер, который ты пихаешь куда надо.
Пока не окажется, что ты у тебя два шаговых двигателя вместо одного, а код весь жестко забит на глобальные переменные, и вот тут и начинаются макароны.
Впрочем, у меня задача была показать тебе разные способы, а не выбирать их за тебя.

Аноним 10/10/19 Чтв 00:35:34 149277361
>>1492766
>была показать тебе разные способы
Я учел на будушее, спасибо.

>>1492766
>В хедере extern'ы, то есть декларейшен, в соответствующем модуле - дефинишены без экстернов. И все будет работать. Так ине понял зачем тебе делить хедер на два.
Но если h инклудится в c, где объявление переменной, получается.

extern int var;
int var;

И тебя посылают на хер. Разве не так?

>Пока не окажется, что ты у тебя два шаговых двигателя вместо одного, а код весь жестко забит на глобальные переменные,
Это хороший пример, но оно слишком абстрактный, от ситуации подобное можно и через создание экземпляров и через макароны и через коллекцию.
Но это уже оффтоп.

Аноним 10/10/19 Чтв 00:40:29 149277662
>>1492773
>И тебя посылают на хер. Разве не так?
Нет http://ideone.com/EUF2w6

>Это хороший пример, но оно слишком абстрактный, от ситуации подобное можно и через создание экземпляров и через макароны и через коллекцию.
Почему, все конкретно.
Глобальные переменные не используем. Вместо них создаем контекст модуля и таскаем его. Желательно этот контекст спрятать в .c файле, чтобы наружу торчал только указатель. Это best practices сишного кода.
Исключения следует делать только в случае совсем хардкорного байтоебства, и то, не факт. Потому что вместо malloc можно и статически контексты модуля повыделять, и тогда оверхеда не будет вообще, зато при желании ты сможешь делать несколько экземпляров модуля, что нужно намного чаще, чем ты думаешь.
С другой стороны какой-нибудь Quake написан примерно в твоем стиле, и ничего.

Аноним 10/10/19 Чтв 00:54:14 149278163
>>1492776
>Нет
И в правду. Вот тебе и домыслы... тогда все понятно.
В этом месте вопрос и решается.

> все конкретно.
Ну смотри если у тебя устройство с одной лампочкой, модулем связи и 2мя шаговиками, под которые надо либу еще писать.
Легче попросту замакаронить, т.к. объем мелки и как не старайся, сделать криво и непонятно - сложно.

Или
>совсем хардкорного байтоебства
Что собственно и мой случай - слабое устройство, в которое напихали аки в японское метро и еще хотят.

>статически контексты
Остальное так и сделано правда через жопу и все один хер жестко прибито, просто конкретно этот модуль - удобнее сделать так, т.к. она один из немногих нужен везде и часто, поэтому и вопрос по скорости.




Аноним 10/10/19 Чтв 01:35:14 149280064
>>1492540
Компилировать все ссылающиеся на класс файлы vs компилировать только .cpp-файл.
Хм, что же выбрать?
Аноним 10/10/19 Чтв 01:56:49 149280965
asyncop2.png (24Кб, 377x413)
377x413
Аноним 10/10/19 Чтв 01:57:43 149281066
>>1492809
сразу. По-этому его надо нонстопм дрочить на каждый чих
Аноним 10/10/19 Чтв 02:16:05 149281467
>>1492442 (OP)
У меня есть лист и два итератора. Мне надо поменять местами значения на которые они указывают ( в листе), но если использовать swap, то итераторы инвалидируются. Надо это выполнить без инвалидации за О(1). Говорят, можно использовать как-то splice, но как?
Аноним 10/10/19 Чтв 04:07:59 149282368
>>1492755
>>1492753
Нахуя вообще пользоваться кутишным расширением? Сколько лет уже программирую, никто ни разу не сказал "вот это бля годное расширение, заебца". Почему нельзя просто™ скачать собранные бинарники и подключить их к проекту? От 17 студии подойдут к 19.
Аноним 10/10/19 Чтв 07:52:31 149285369
>>1492814
>то итераторы инвалидируются.
С чего бы? Ты не итераторы меняешь, а значения, на которые они указывают.
Аноним 10/10/19 Чтв 10:42:33 149291770
>>1492810
А если вместо передачи handler у меня yield[ec]? Т.е. переключение на корутину. Сначала выполнится корутина, а потом run разблокируется? По тестам вроде так, я ставил задержки внутри корутины и смотрел по логам в консоль, что вызовется первым: печать после задержки внутри корутины или печать после вызова run. Типа

boost::spawn(io_context, lambda); // внутри лямбды вызывается sleep и log
some_async_op(..., yield[ec]);
io_context.run();
log(...);
Аноним 10/10/19 Чтв 10:46:27 149292271
>>1492761
>Я люблю в хедере описывать дефайны и тайпдефы, после чего инклудить их в

А я люблю в хедере описывать дефайны и тайпдефы, после чего инклудить их в
.с. Каждый день я хожу по проекту с хедером и собераю в него все дефайны которые вижу. На два полных файла целый день уходит. Зато, когда после тяжёлого дня я открываю main.c... ммм и сваливаю в нее свое сокровище. И запускаю компилятор представляя, что меня поглотил единый организм дефайны. Мне вообще кажется, что дефайны, умеют думать, у них есть свои семьи, города, чувства, не меняйте их на шаблоны, лучше приютите у себя, говорите с ними, ласкайте их…. А вчера в ванной, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в дефайны, рыбы, водоросли, медузы, все из дефайнов и тайпдефов, даже небо, даже Аллах!.
Аноним 10/10/19 Чтв 10:46:40 149292372
>>1492917
> boost::spawn(io_context, lambda); // внутри лямбды вызывается sleep и log
перед sleep и log внутри лямбды есть yield, разумеется
Аноним 10/10/19 Чтв 11:13:02 149294673
Какое исключение выкидывать сеттеру при инвалидном аргументе?
Аноним 10/10/19 Чтв 11:30:13 149297374
>>1492946
Я понял. Не отвечайте.
Аноним 10/10/19 Чтв 11:36:32 149298575
image.png (5Кб, 553x123)
553x123
Насколько хороша идея сделать в библиотеке отдельный хэдер с дефайнами условий компиляции, где, например, можно будет отключить проверки аргументов и так далее.
Аноним 10/10/19 Чтв 13:02:51 149305576
>>1492985
Этот отдельный хедер звали config.h
Аноним 10/10/19 Чтв 13:43:32 149308077
Хочу начать писать на с++, решил сделать 1й проект веб-апликейшен логер моего рабочего времени.
Погуглил как делать серваки, чаще всего предлагают писать свои сокеты/хендлеры с нуля.
Погуглил "готовые решения", нашел это https://github.com/etr/libhttpserver#introduction

Теперь сомневаюсь в своей затее, веб-сервера не особо популярны на плюсах?
Может кто-нибудь сможет подсказать как мне лучше начать в этом направлении писать?
взять писать без задней мысли прошу не советовать
Аноним 10/10/19 Чтв 13:59:32 149309178
>>1493080
Обычно используют boost, но рискуешь охуеть от всяких фокусов. >>1492809
Аноним 10/10/19 Чтв 14:15:40 149310179
image.png (35Кб, 1069x496)
1069x496
Стоит ли создавать свои собственные классы ошибок или же просто потерпеть и поиспользовать std::runtime_error?
Аноним 10/10/19 Чтв 14:17:27 149310280
>>1493101
если у тебя разные обработчики для твоих ошибок - то да, иначе нет
Аноним 10/10/19 Чтв 16:37:34 149320081
>>1493101
Почему бы и нет, но нахуя столько бойлерплейта
Аноним 10/10/19 Чтв 16:42:08 149320382
>>1493080
Если в кьют умеешь то бери их сокеты, повторяй примеры из документации и всё. Если хттп сервак надо - на гитхабе пару либ готовых, qhttpserver например, эхо сервер в строчек 30. Но вообще да, серваки на плюсах не очень популярны судя по всему.
Аноним 10/10/19 Чтв 17:04:36 149323283
>>1492444
> Почему все до сих пор пишут классы в С++, разделяя хэдер и реализацию?
Это удобнее и понятнее.
Аноним 10/10/19 Чтв 17:14:48 149325084
>>1492523
То есть просто обертка?
Аноним 10/10/19 Чтв 17:16:00 149325185
Аноним 10/10/19 Чтв 17:48:21 149328286
Надо считать символ char. std::cin >> c; Как проверить, чтобы был введен именно символстрочной, заглавный цифра, а не строка или несколько цифр?
Аноним 10/10/19 Чтв 18:40:58 149331487
1570722034203.jpg (546Кб, 1080x1618)
1080x1618
1570722034289.jpg (517Кб, 1080x1620)
1080x1620
Как стать таким же умным, как этот челик?
Аноним 10/10/19 Чтв 19:04:33 149332688
>>1493314
Да тоже пизди всякие модные слова без перерыва, и все будут охуевать и думать "как стать таким же умным, как ты"
Аноним 10/10/19 Чтв 19:06:57 149332989
>>1493314
>не отличать ум от эрудиции
Тебе – никак.
Аноним 10/10/19 Чтв 19:40:20 149334590
>>1493314
че за дрыщ ебаной, у нас таких на заводе мужики байтоебы пиздят с ноги
Аноним 10/10/19 Чтв 19:53:08 149336191
>>1493314
Прсрись на форумах пару лет, почитай срачи. Будешь рожать подобное борщехлебное дерьмо тоннами.
Аноним 10/10/19 Чтв 19:57:37 149336392
>>1493314
>запретить стрелять себе в ногу
>запретить
Идите на хуй со своими запретами, авторитарные макаки.
Аноним 10/10/19 Чтв 19:58:06 149336593
>>1493282
Серьезно, помогите. Попробоваль сразу после ввода вставить проверку if(std::cin.failbit) так она при любом вводе срабатывает .
Аноним 10/10/19 Чтв 20:02:18 149337494
>>1493365
Хотя тут понял, где обосрался.
Но все же как выдавать ошибку, если на ввод подается больше 1 символа не ясно.
Аноним 10/10/19 Чтв 20:03:29 149337595
>>1493365
Читать строку целиком (getline) и потом проверять, что она из одного символа и т д.
Аноним 10/10/19 Чтв 20:28:12 149340196
>>1493282
Если у тебя есть conio.h, то можно getch() - она в принципе не даст больше одного символа ввести.

>строчной, заглавный цифра
isalnum()
Аноним 10/10/19 Чтв 22:02:30 149350997
>>1493314
Лучше не быть таким. И думать в первую очередь, как сделать без шаблонов.
Аноним 10/10/19 Чтв 23:10:08 149354698
В каких конкретных случаях создание ссылки продлевает жизнь объекта? Вот это работает например, висящей ссылки не будет. Сказать, что я охуел — ничего не сказать.
const auto &ref = create_some_rvalue();
Аноним 10/10/19 Чтв 23:11:10 149354999
Аноним 10/10/19 Чтв 23:15:23 1493553100
>>1493549
Дружок-пирожок, клуб безработных педиков парой тредов выше. Я трудоустроенный высокотестостероновый натурал.
Аноним 10/10/19 Чтв 23:17:49 1493557101
>>1493546
всегда, до конца скоупа.

{ // все ок
const int& var1 = something();
something2(var1)
}

const int& func()
{
const int& var2 = something();
return var2; // висяк
}


Аноним 11/10/19 Птн 00:46:52 1493597102
Пацаны, что такого сделали в 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]?
Аноним 11/10/19 Птн 00:54:26 1493600103
>>1493597
> using T = T
Так точно никогда нельзя было делать. Быть может, ты конкретизируешь вопрос?
Аноним 11/10/19 Птн 01:07:35 1493608104
>>1493600
Так, собственно, конкретизировать и нечего по сути. Был древний код как в примерах, при попытке собрать новой студией с /std:c++17 вылазят ошибки номер хуй C2386 во втором случае и что-то вроде unknown identifier в первом
Аноним 11/10/19 Птн 01:12:58 1493610105
Нахуя хвастаться скоростью, если всё равно все пользуются умными указателями а не сырыми? Нахуя вызывать деструктор по типу указателя, если ясно что память помечёт? Нахуя вводить лямбды если с безопасностью пиздец? Что за уёбище получилось в итоге? И почему им до сих пор пользуются?
Аноним 11/10/19 Птн 01:20:35 1493611106
>>1493610
Тебе в тред программистов на реакте
Аноним 11/10/19 Птн 01:32:46 1493616107
>>1493611
>пук
Никто и не ожидал, что у зашореных цппшников найдутся оправдания уёбищности этого говна. Но ты хотя бы мог отправить меня в раст-тред. Из этого треда _всех_ нужно отправлять в раст-тред. А ещё лучше попросить Абу сделать редирект
Аноним 11/10/19 Птн 01:35:19 1493617108
1545664.png (3Кб, 409x103)
409x103
1545454.png (19Кб, 893x320)
893x320
Как передавать нажатия по рабочему столу в реальном времени? Написал вот такой кусок кода, по задумке это что-то вроде рабочего стола, только в отдельном окне, то есть я нажимаю на папку - она открывается и так далее. Как я понимаю проблема в том, что в виндовс не может быть активно более 1 окна, есть какие-то способы обхода или реализация в целом хуйня, куда тогда стоит копать?
Аноним 11/10/19 Птн 01:48:39 1493622109
>>1493610
Я всем говорю, что инженером работаю. Тянки боятся, память течёт. Если бы на джс писал, то было бы стыдно смотреть в зеркало по утрам.
Аноним 11/10/19 Птн 01:51:50 1493624110
>>1493622
>Если бы на джс писал, то было бы стыдно смотреть в зеркало по утрам.
корчил бы в зеркало ахегао и складывал бы руки в кошачьи лапки
Аноним 11/10/19 Птн 02:11:31 1493630111
>>1493616
попроси, зачем срать то пришел. Насрать себе в штаны можешь
Аноним 11/10/19 Птн 02:47:40 1493639112
>>1493610
>Нахуя хвастаться скоростью, если всё равно все пользуются умными указателями а не сырыми
В огороде бузина, а в киеве дядька. Если ты подразумевал, что умные указатели медленные, то это не так.
>Нахуя вызывать деструктор по типу указателя, если ясно что память помечёт
Что
>Нахуя вводить лямбды если с безопасностью пиздец
Хотя бы чтобы делать parallel_for без плясок с бубном
>Что за уёбище получилось в итоге
Сказал растоебок, у которого язык уже сравним по уебщиности, хотя ему 10 лет всего.
>>1493616
В оппосте есть ссылка "вместо шапки". Зайти туда. Найди параграф "памятка ньюфагу". Прочитай 5-й пункт.
Аноним 11/10/19 Птн 09:17:53 1493698113
>>1493639
>Сказал растоебок
С чего ты взял? Я на с++ уже 5 лет. До этого на Сишке и ObjC. И что бы вы думали? Несмотря на смартпойнтеры позавчера поймал сигфолт. Дело в том что с++ это механизм из говна, смазанный поносом. И если есть возможность пресекать хотя бы часть фейлов на этапе компиляции, то это просто космические технологии по сравнению с с++
Аноним 11/10/19 Птн 09:30:59 1493701114
>>1493698
> Несмотря на смартпойнтеры позавчера поймал сигфолт
> с++ это механизм из говна
Механизм из говна тут не c++
Аноним 11/10/19 Птн 12:07:09 1493782115
image.png (7Кб, 1075x33)
1075x33
image.png (10Кб, 715x118)
715x118
image.png (7Кб, 976x37)
976x37
Есть метод(см. первую пикчу). У него по дефолту значение параметра
> std::function<void(GLFWwindow✡, int, int)>
равняется функции со второго пика.
Также внутри первого метода есть вызов функции glfwSetFramebufferSizeCallback, которая принимает в качестве аргумента указатель на функцию вида
> void(GLFWwindow✡, int, int) То есть у меня std::function на нее ориентирован
Но почему-то, когда я передаю функции glfwSetFramebufferSizeCallback ссылку на std::function ее вида, то все нормально. Как такое вышло?
Аноним 11/10/19 Птн 12:11:25 1493788116
Байтоёбы есть ?
Аноним 11/10/19 Птн 12:15:37 1493792117
Аноним 11/10/19 Птн 12:44:24 1493811118
Может кто посоветовать хороших книг(желательно на русском) по c++17 или сайтов с задачками, а то основы изучены а задач для практики пока немного.
Аноним 11/10/19 Птн 12:47:10 1493814119
Аноним 11/10/19 Птн 12:59:26 1493822120
>>1493814
Я бы на твоем месте извинился.
Аноним 11/10/19 Птн 13:00:28 1493823121
>>1493811
Страуструп, ЯП C++ 2 издание
Аноним 11/10/19 Птн 13:04:14 1493828122
image.png (1120Кб, 594x824)
594x824
>>1493823
>Страуструп
Как можно советовать такое дерьмо, когда есть пикрелейтед?
Аноним 11/10/19 Птн 13:07:19 1493833123
>>1493828
Анон, эта книга для настоящих профессионалов, не пали годноту быдлу.
Аноним 11/10/19 Птн 15:12:16 1493926124
>>1493698
Ты худший вид растоебков - которые еще и на расте не пишут.
Аноним 11/10/19 Птн 16:21:18 1494009125
>>1493926
Нет, просто я ценю своё время и отвечаю за качество продукта
Аноним 11/10/19 Птн 17:13:48 1494052126
Встретил задачку send + more = money, решил написать программу решающую это говно. Но не получается. Точнее выходит неэффективное говно, которое тратит на решение больше 2 минут. Вот оно https://ideone.com/QCroGi
Как сделать заебись? Чувствую себя умственно отсталым.
Аноним 11/10/19 Птн 18:24:40 1494094127
>>1493617
Бампну вопрос, может есть какой-то способ сделать 2 окна активными?
Аноним 11/10/19 Птн 18:45:29 1494107128
>>1494052
Кек, решил в уме минут за 6, похоже брутфорс эффективнее :)
В алгоритм не вникал, но можешь попробовать вместо map использовать std::array<int, 128>
Аноним 11/10/19 Птн 21:50:21 1494232129
>>1494052
>>1494107
Брутфорсы разные бывают. Для ускорения перебора нужно как можно раньше понять, что мы идём не туда и игнорировать эту ветку.
Например в этой задаче можно поддерживать множество "занятых" цифр, а также идти с конца и смотреть подходящие варианты по последней цифре.

http://ideone.com/TocGUa
Закодил вашу хуйню за час где-то. В школе занимался олимпиадами, но за прошедшие 8-10 лет деградировал до уровня двачей
Аноним 11/10/19 Птн 21:58:07 1494246130
Пытаюсь вкатится в кресты. Хочу написать функцию, которая читает любую переменную и возвращает ее значение. Логика подсказывает, что я могу написать скажем 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 минут, до этого писал на питоне и похпе, поэтому вопросы наверное максимально глупые

Аноним 11/10/19 Птн 22:01:32 1494248131
Сегодня я познал, почему c++ далеко не везде топовый язык.
Аноним 11/10/19 Птн 22:10:46 1494256132
>>1494246
> cin<<s;
лол


Просто во втором случае конпелятор не может вычислить тип Т.
Пиши s = read<string>();
Аноним 11/10/19 Птн 22:15:06 1494258133
>>1494256
Ну я же говорю, только 20 минут как начал. Почему то в Википедии такие простые штуки при работе с шаблонами не объясняются, но скорее всего я просто в глаза ебусь привыкнув к пхп.
Cin устарел, да?
11/10/19 Птн 22:15:53 1494259134
>>1494248
расскажи нам

>>1494246
Поток ввода никак не может понять, какая там переменная, максимум - вытащить циферку, и то, если ты ему скажешь, что там точно циферка.

Читай в строку, и дальше парси сам, вариантов немного
Аноним 11/10/19 Птн 22:16:06 1494260135
>>1494258
>>1494256
А, перенапрвление вывода не в ту сторону, точно.
Аноним 11/10/19 Птн 22:16:11 1494261136
>>1494258
Просто взять и писать на плюсах нельзя, возьми почитай Прату, сделай примеры, а потом вернись к своей хуйне. Это тебе не питон, тут даже хеллоуворд может не компилироваться.
Аноним 11/10/19 Птн 22:47:31 1494276137
>>1494248
Тоже начал учить волшебный js?
Аноним 11/10/19 Птн 23:00:50 1494287138
>>1494246
Ну да, динамический петушок не может в статическую типизацию.
Аноним 11/10/19 Птн 23:03:28 1494292139
>>1494287
Я задал вопрос и получил на него ответ, но спасибо за жалкую попытку самоутверждения, было забавно
Аноним 11/10/19 Птн 23:05:10 1494294140
>>1494276
>>1494259
Я вот подумал, что вам будет не очень интересно, поскольку я школьник, но сегодня писал олимпиаду и почувствовал разницу в скорости написания кода на питоне и плюсах. Мне также показалось что плюсы тяжелее читать. Как же обидно когда алгоритм в голове составил, а записать нормалтно не можешь
Аноним 11/10/19 Птн 23:08:20 1494298141
>>1494294
Нихуя себе откровения, на языке тс динамической типизацией и высоком уровне абстракции из коробки писать проще! Охвау
Аноним 11/10/19 Птн 23:10:25 1494301142
>>1494298
А как научиться переносить мысли из головы в код как можно точнее? Где задачи на эту тему взять? Потому что я такую хуйню написал что пиздец
Аноним 11/10/19 Птн 23:27:09 1494324143
>>1492800
это же какая-то ебонутость сиплюсов.
можно же (не пердоля ничего остальное даже) препроцесором генерировать отдельный файл имплементации для методов, которые не нужно инлайнить, и конпелировать всё по-нормальному, а в процессе написания держать все в хедерах, чтобы не ебать мозги несколькими файлами, иметь комменты для функций рядом с кодом, не ебать себя повторением хедеров функций в двух местах, не ебать себя переключением между хедером и имплементацией. все нормальные текстовые редакторы поддерживают сворачивание кода, поэтому "загленул в хедер сразу все увидел" не аргумент.

ухожу на раст.
Аноним 11/10/19 Птн 23:31:03 1494333144
Есть какой-то резон учить/переходить на Qt Quick, если мне норм с Qt Widgets?
Аноним 11/10/19 Птн 23:33:47 1494339145
>>1494324
Не возвращайся только потом
Аноним 11/10/19 Птн 23:38:41 1494355146
>>1494339
>он думает, что я человек своего слова и действительно уйду на раст
Приятно видеть, что кто-то еще не потерял веру в людей.
Аноним 12/10/19 Суб 00:42:07 1494407147
Аноним 12/10/19 Суб 00:52:05 1494412148
>>1494407
Во многих языках есть модули. Не нужно отдельно писать интерфейс и реализацию, достаточно скомпилировать модуль, а затем его импортировать в своей программе. Ничего никуда не инклудится, всё компилится по отдельности. Хорошо это или плохо, думай сам.
Аноним 12/10/19 Суб 03:08:43 1494434149
>>1494412
Ну да, пожалуй удобно.
Аноним 12/10/19 Суб 04:35:57 1494445150
Аноним 12/10/19 Суб 04:38:56 1494446151
>>1493546
>В каких конкретных случаях создание ссылки продлевает жизнь объекта?
В ньюфаг-тред, шагом марш.
Аноним 12/10/19 Суб 11:15:53 1494531152
Аноним 12/10/19 Суб 15:04:08 1494693153
Как отправить нажатие мышки с активного окна на неактивный рабочий стол?
Аноним 12/10/19 Суб 18:16:35 1494918154
Анончики, помощь нужна. Есть у меня двусвязный список, в виде класса. Надо его отфильтровать и вернуть новый список, не трогая старый. Можете описать алгоритм, как это сделать? Я совсем извращаться начал, написал метод, который выдает массив из элементов списка, прошедших фильтрацию и в другой функции вставляю элементы массива в новый список и возвращаю его. В итоге, исходный список почему-то заменяется новым.
Аноним 12/10/19 Суб 18:49:22 1494955155
Я не понимаю, объясните.
Создаю файл заголовка и в нем описываю класс. В классе есть один метод.
Создаю файл с кодом, в нем описываю метод.
Все ок.
Создаю класс. Обращаюсь к методу. Вижу ошибку "неопределенная ссылка к 'методнейм' " (undefined reference to 'classname::methodname')
Переношу определение метода в файл заголовка - все работает.
Что за хуйня?
Аноним 12/10/19 Суб 18:56:25 1494959156
>>1493326
Ты просто макакен-ооп-плюсовик. Я все из написанного понял и в целом согласен
Аноним 12/10/19 Суб 18:59:05 1494962157
>>1494918
Дцп-макакен пытается понять иммутабнльность, но не получается
Аноним 12/10/19 Суб 19:03:08 1494964158
>>1494918
Лаба что ли? Идешь циклом по списку и делаешь push_back в новый список элементам, удовлетворяющим условию.
Если не лаба, то чем тебя стл не устравивает.
Аноним 12/10/19 Суб 19:11:47 1494971159
>>1494964
если не лаба - то как программист он явно неоче
Аноним 12/10/19 Суб 19:17:28 1494976160
Аноним 12/10/19 Суб 20:18:50 1495009161
Как реализовать уведомления об обновлениях в чате? Клиент по какому-то каналу должен раз в n [промежуток времени] опрашивать сервер о новых обновлениях? Нельзя какое-то подобие сигналов в Qt реализовать?
Аноним 12/10/19 Суб 20:27:49 1495016162
>>1494918
Копируешь список и фильтруешь его.
Аноним 12/10/19 Суб 21:10:03 1495041163
>>1495016
Куда копировать? Список - это же не массив, там данные рандомно в памяти расположены и связаны указателями.
Аноним 12/10/19 Суб 21:26:09 1495049164
Аноним 12/10/19 Суб 21:29:59 1495052165
>>1495049
Да я уже загуглил. Вопрос еще один: http сервер не хранит состояние, мне нужно передать юзеру адрес второго сервера, который будет посылать уведомления об обновах, а юзер будет их с мейн сервера забирать?
Аноним 12/10/19 Суб 21:50:04 1495071166
>>1494955
ты не компилируешь имплементацию класса. нужно делать
g++ main.cpp bdsm.cpp
Аноним 12/10/19 Суб 21:51:49 1495072167
>>1495071
ну или там не линкуеш её че там еще в плюсах.
у кого-нибудь шишка зачешется выебнуться и меня обязательно поправят.
Аноним 12/10/19 Суб 22:24:15 1495094168
>>1495041
Копируешь каждый элемент списка и связываешь их в том же порядке.
>Куда
Выдели память в куче и туда и копируй, что ты как маленький.
Аноним 12/10/19 Суб 22:27:48 1495100169
>>1494955
Используй вижуал студию, будет думать за тебя
Аноним 12/10/19 Суб 22:30:57 1495105170
>>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.
Аноним 13/10/19 Вск 03:46:30 1495292171
15272794447840.jpg (137Кб, 500x429)
500x429
Посоветуйте книги по Winapi, думал начать с Рихтера, но не староват будет?
Аноним 13/10/19 Вск 04:46:01 1495305172
Аноним 13/10/19 Вск 06:30:24 1495322173
>>1495292
Зачем по винапи писать книги? На MSDN и так все расписано с примерами. Если хочешь углубиться в архитектуру оси, то читай Windows Internals 7 часть, 1 книга уже вышла, вторая будет после нового года.
Аноним 13/10/19 Вск 08:02:56 1495343174
эстэдэ::стринг строчка;
эстэдэ::син >> строчка;
эстэдэ::каут << строчка;
Аноним 13/10/19 Вск 08:50:40 1495356175
15667900104490.jpg (406Кб, 875x1250)
875x1250
>>1494232
Пиздец анон, не могу понять как работает твой код
Аноним 13/10/19 Вск 08:54:01 1495358176
Аноним 13/10/19 Вск 09:00:32 1495361177
15598299648160.jpg (180Кб, 1037x584)
1037x584
Аноним 13/10/19 Вск 09:11:24 1495366178
15668708040330.jpg (608Кб, 1060x1500)
1060x1500

>>1494232
Сколько ты зарабатываешь, анон?
Аноним 13/10/19 Вск 10:01:07 1495381179
1570277077808.png (72Кб, 386x361)
386x361
Аноним 13/10/19 Вск 12:24:13 1495436180
15674199303240.jpg (919Кб, 1080x1080)
1080x1080
Почему на си++ ещё кто-то пишет, если для всего низкоуровневого используется си, так как его стандартная либа легче и сам язык ближе к ассемблеру, а для крупных коммерческих энтерпрайз проектов удобнее использовать си шарп?
Аноним 13/10/19 Вск 13:05:46 1495455181
>>1495436
Никто на нем не пишет, в этих итт тредах мы просто траллим нюфагов.
Если ты не заметил, то все пришедшие с лабами на якобы с++ в разделе реально используют из крестов только ввод/вывод, остальное все - чистейший си.
Аноним 13/10/19 Вск 13:51:21 1495494182
>>1495436
Двачую, за растом будущее
Аноним 13/10/19 Вск 14:27:12 1495536183
>>1495436
Попробуй что-нибудь большое написать на си. (Или просто разобраться в кодовой базе FFmpeg)
Все ФП веруны, что обсирают ООП (и в особенности крестовый недоООП), просто не пробовали что-то большое делать на чисто процедурном языке.

Нет-нет, при хорошей архитектуре, не сложно. Суть вот в этом "при".
С - ад для архитектора. Плюс ещё сырые указатели. (сегфолт, сегфолт... протечка)

Си++ лучше Си в плане выразительности, но ты ещё и не платишь за то, что не используешь. Лучшее из двух миров. На словах.

Потом можно сказать, что нахуй С, я возьму C#. А в требованиях проекта - кроссплатформенность + быстрота. И тут уже можно пососать хуйца. (А можно и не пососать. От опыта, наверное зависит.) Плюс, C# - это вендор-лок. Ну или был им до недавнего времени.

А потом можно сказать, что мы напишем нагруженные части на С, а сложные на С#. И тогда вся комманда получает тонны ебли. Такой, что дома ебаться уже и не хочется.

ИМО, не обоссывайте.
Аноним 13/10/19 Вск 14:32:01 1495542184
>>1495536
мой первый в жизни пет проект был игрой на си
я тогда понял что структуры рулят лол
Аноним 13/10/19 Вск 14:38:41 1495551185
>>1495542
typedef Xynta struct XyntaStruct*;
или в наглую?
Аноним 13/10/19 Вск 14:39:06 1495554186
>>1495551
> typedef Xynta struct XyntaStruct;
То есть
typedef struct XyntaStruct
Xynta;
Аноним 13/10/19 Вск 14:40:14 1495556187
>>1495554
Сука. За что /code выпилили? Это же как суп ножом есть.
Аноним 13/10/19 Вск 14:44:10 1495560188
>>1495554
еще хуже (я так и не выучил толком си так что думаю что еще хуже)
в основном
typedef struct {.....} xynta
только линкед лист делал структурой
typedef struct node {.....} node
Аноним 13/10/19 Вск 14:47:38 1495565189
>>1495436
Везде, где требуется высокая производительность, используются плюсы. На нем пишут движки браузеров, виртуальные машины и т.д.
Инкапсуляция делает код более читабельным, есть шаблоны, которые иногда упрощают жизнь, есть защита от дурака в виде модификаторов доступа, всякие удобные штуки вроде перегрузки операторов, референсы и т.д.
>>1495536
>просто не пробовали что-то большое делать на чисто процедурном языке.
C++ очень часто используют без RTTI, ибо оверхед, это недо-ООП и скорее ближе к процедурному программированию с синтаксическим сахаром в виде инкапсуляции, чем к тру-ООП.
Аноним 13/10/19 Вск 14:54:01 1495578190
>>1495560
Понял. Я имел в виду, прятал (инкапсулировал) ли ты детали реализации структуры в сурс файле, или нет.

>>1495565
> C++ очень часто используют без RTTI, ибо оверхед, это недо-ООП и скорее ближе к процедурному программированию с синтаксическим сахаром в виде инкапсуляции, чем к тру-ООП.
Йеп. Но чистая сишка ещё страшнее, не?
И зачем нужет RTTI? Нужно просто сделать хорошую архитектуру, с чёткими интерфейсами и прочим.
Аноним 13/10/19 Вск 15:05:03 1495599191
>>1495578
>И зачем нужет RTTI?
Чтобы работали виртуальные методы. Без виртуальных методов нет полиморфизма, а без полиморфизма нет ООП. Без RTTI C++ это процедурный язык.
>Но чистая сишка ещё страшнее, не?
Да, поэтому C++ и используют.
Аноним 13/10/19 Вск 15:18:47 1495610192
>>1495599
Это был сарказм, btw.
V-тэйблы же работают без RTTI? Или я что-то путаю?
Имеется в виду вообще весь механизм, или же доступная программисту часть?

Если что, всё моё понимание RTTI составлено из вот этой статьи в википедии и опыта работы с самописной динамической идентификацией типов в одной компании.
https://ru.wikipedia.org/wiki/Динамическая_идентификация_типа_данных
Аноним 13/10/19 Вск 15:25:16 1495617193
>>1492442 (OP)
Знакомый забашлял бабла в GeekBrains и пошел туда на курсы, в конце там еще и сертификат дают. Насколько хороша эта тема? Профит будет?
Аноним 13/10/19 Вск 15:38:02 1495624194
>>1495617
Конечно будет. Ложное чувство получения знаний и поднятие морального духа. А мог бы просто книжку прочитать
Аноним 13/10/19 Вск 15:41:03 1495628195
>>1495624
Так есть хоть какой-то профит от подобных курсов при трудоустройстве? сам планирую пойти Сертификат роль сыграет?
Аноним 13/10/19 Вск 15:47:13 1495632196
>>1495628
>Так есть хоть какой-то профит от подобных курсов при трудоустройстве?
>C++
Нет, это скорее минус.
Аноним 13/10/19 Вск 15:47:16 1495633197
>>1495628
Сомневаюсь что это решающую роль сыграет. Как на собеседовании себя покажешь, такой и будет результат, это максимум небольшой плюс будет. Всё-таки это не MIT какой-то, а отчесественная хуйня для выкачивания денег.
Аноним 13/10/19 Вск 16:13:18 1495652198
>>1495610
V-тейблы это и есть RTTI.
Аноним 13/10/19 Вск 16:21:18 1495656199
>>1495652
RTTI это же про typeid и dynamic_cast. Виртуальные таблицы и без них спокойно работают.
Мимопроходил
Аноним 13/10/19 Вск 17:34:15 1495709200
>>1495656
Погуглил сейчас, да, ты прав.
Аноним 13/10/19 Вск 17:46:04 1495721201
>>1493610
использование умных указателей (из стандарта) вообще не влияет на скорость выполнения по сравнению с сырыми, есть небольшие затраты на память и все


Аноним 13/10/19 Вск 17:49:45 1495728202
>>1493610
лямбды в с++ - это просто синтаксический сахарок в языке, в случае когда нужно на один раз передать callable сущьность, те чтобы не писать функторы и обычные функции для одноразового применения

Аноним 13/10/19 Вск 17:49:46 1495729203
>>1495721
> умных указателей
> т.е. и shared тоже
А как же тот такт процессора на refcount?
А? А?!
Аноним 13/10/19 Вск 17:56:23 1495736204
>>1495729
шаред в 99% не нужен. Юник - бесплатный
Аноним 13/10/19 Вск 17:59:25 1495743205
>>1495736
Херасе.
Я пытаюсь по умолчанию везде пихать юник, а потом мне всё равно приходиться переделывать на шаред.

Могу сказать наоборот: в 99% юник не нужен.
Аноним 13/10/19 Вск 18:17:23 1495769206
>>1495743
А мог бы просто передавать по значению и не ебать себе мозг.
Аноним 13/10/19 Вск 18:22:50 1495779207
>>1495769
Постоянная необходимость в Big 5 и вероятность object slicing'а дружно смеются мне тебе в лицо.
Аноним 13/10/19 Вск 18:24:04 1495782208
>>1495743
Что-то у тебя с графом владения не то.
Аноним 13/10/19 Вск 18:27:53 1495787209
>>1494918
напиши "свободную" функцию фильтрации которая принимает список который нужно отфильтровать, условия фильтрации, а возвращает новый список, в котором будут отфильтрованные элементы


Аноним 13/10/19 Вск 18:32:24 1495796210
>>1495743
Попробуй дизайнить механизмы владения получше. Или, вообще хотя-бы пытаться думать, что у тебя и чем должно владеть.

Пихать всюду шаредпоинтеры, потому-что ты не знаешь, как у тебя что и где - это нихуевый такой антипаттерн и code smell
Аноним 13/10/19 Вск 18:36:06 1495800211
>>1495743
Мда, за километр видно, что у тебя память течет в проекте. В расте твой говнокод даже не скомпилился бы и ты бы рыдал как побитая шлюха над ошибками борроу чекера, размазывая сопли по щекам.

>>1495779
Сука, до сих пор блевать тянет от rule of five, особенно после раста, где от этой хуйни сознательно отказались и конструкторы простые как слеза младенца.
Аноним 13/10/19 Вск 18:36:40 1495801212
>>1495796
>>1495782
Ок. Не то чтобы я был старше джуна и мог бы кому-то всё испортить, но всё равно полезно свой косяк увидеть.
Аноним 13/10/19 Вск 18:37:06 1495802213
>>1495779
Ты просто не умеешь готовить value семантику
Аноним 13/10/19 Вск 18:37:30 1495803214
>>1495536
кстати, ffmpeg всегда приводят в пример того, что архитектура этого проекта требует ооп-методик (в частности как динамического, так и статического полиморфизма)
но он написан на си, и в этом проекте, по сути, возможности ооп эмулируются средствами си

Аноним 13/10/19 Вск 18:40:04 1495807215
>>1495565
>тру-ООП
Это какое такое? То, где все заканчивается срачем на тему "как я выбирал свой любимый паттерн из GoF?"
Аноним 13/10/19 Вск 18:45:32 1495817216
>>1495807
>>тру-ООП
>Это какое такое?
Конечно же такое, как анал кэй придумал.
Аноним 13/10/19 Вск 18:50:26 1495831217
>>1495617
если хочешь учится за деньги (на русском языке) - то 4 курса по с++ на курсере от яндекса оптимальный выбор на данный момент

Аноним 13/10/19 Вск 21:21:41 1495976218
>>1495807
Да забей, я долбоеб с лабами.
Аноним 14/10/19 Пнд 16:05:22 1496479219
Как вкатиться в boost?
Аноним 14/10/19 Пнд 16:17:17 1496492220
>>1496479
Буст это набор библиотек под разные задачи, а не одна библиотека.
Аноним 14/10/19 Пнд 19:00:02 1496590221
>>1496479
А тебе зачем? Там много такого, что тебе уже не пригодится, потому что уже есть в стандарте. Читай примеры по интересующим библиотекам, типа gil, hana, geometry
Аноним 14/10/19 Пнд 22:46:41 1496830222
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, хз почему и как фиксить, хелп
Аноним 14/10/19 Пнд 22:48:40 1496831223
>>1496830
Всё, проблема решилась - CLion помещает сборки в отдельную папку
Аноним 14/10/19 Пнд 23:00:15 1496843224
>>1496830
>const char temp[11] = {'i', 'n', 'p', 'u', 't', char(i + 48), '.', 't', 'x', 't'};
'\0' ?
Аноним 14/10/19 Пнд 23:02:26 1496845225
>>1496843
при такой инициализации все, что не указано, будет zero initialized, включая, собстно, последний элемент
Аноним 14/10/19 Пнд 23:15:03 1496853226
Qt, Winforms, WPF, UWP
На чём лучше сегодня писать GUI?
Аноним 14/10/19 Пнд 23:23:14 1496862227
>>1496853
Лучше сделать вебапп на питоне который тягает твою либу на крестах. А так зависит от задачи. Qt самый универсальный вариант, но для венды можно подумать
Аноним 14/10/19 Пнд 23:37:02 1496873228
>>1496862
>Лучше сделать вебапп на питоне
Чем лучше?
Аноним 14/10/19 Пнд 23:48:03 1496885229
>>1496873
Юниксвей - просто, композабельно, доступно с кучи клиентов
Даже архитектура твоей либы будет скорее всего продуманней стандартного button1click
Аноним 15/10/19 Втр 00:06:18 1496895230
Аноним 15/10/19 Втр 02:19:39 1496930231
>>1495721
Шаред не бесплатный и вообще хуита, ногу отстреливает. Юник заебись, везде юзаю, брат жив.
Аноним 15/10/19 Втр 02:29:57 1496933232
>>1496930
Если грамотно использовать шаред (а именно - не тягать счетчик ссылок постоянно), то он почти бесплатный и не хуже юника.
А так 90% случаев покрывает банальный std::vector, а еще 9% - другие контейнеры. Не так уж указатели в современном С++ нужны.
Аноним 15/10/19 Втр 03:19:38 1496941233
>>1496933
если грамотно использовать юник, шаред вообще не нужен
Аноним 15/10/19 Втр 04:05:38 1496959234
15295108737570.jpg (19Кб, 480x325)
480x325
>>1494009
>я отвечаю за качество продукта
>написал крашащуюся хуету – это не я, это язык!! Язык говно просто!
Аноним 15/10/19 Втр 05:49:44 1496973235
а ну расскажи за умные указатели...
Короче, есть умный указатель shared_ptr<Data> data;

есть некоторый класс, который должен работать с этим data , он хранит некий указатель mdata. Но при этом этот класс не должен захватывать указатель data: если data будет уничтожен, то mdata должен обнулиться.


Если mdata сделать shared_ptr, то он просто увеличит счетчик и не даст уничтожить указатель в data. мне это не надо.
Мне надо именно чтобы mdata становился нулем, когда data уничтожается.


Как? weak_ptr? меня просто задолбало в гугле что про weak_ptr все как попугаи тявкают про перекрестные ссылки, вместо нормальных вещей. Не понимаю (да, я дурачок)



Аноним 15/10/19 Втр 06:26:42 1496981236
>>1496973
Что происходит с data при копировании класса? От этого зависит ответ
Аноним 15/10/19 Втр 06:46:50 1496985237
>>1496981
при копировании класса все mdata этих классов должны указывать на data (но да, эти классы тоже не должны увеличивать счетчик data, и если data обнулился, то все mdata тоже должны обнулиться)


То есть задача такая - класс Foo получает указатели на методы классов, которые потом вызовет через оператор () (ну некий вариант келбэка... точнее это реализация slot and signal).

При этом этот класс не должен захватывать сам класс, чей метод он хранит (я не хочу наследовать классы - лишние действия если можно без, просто написав как-то так = bind(foo, Foo::bar).


Если делать всё через голые указатели, то возникает проблема - если класс удален, то Foo начинает вызывать метод невалидного класса.
С другой стороны если Foo будет хранить shared_ptr на класс, то тогда класс нельзя будет удалить, его метод все равно будет вызываться.
если сделать ручную отвязку... ну ручная отвязка же, это как удалять память в ручную - забыл и потекло.


Ну и короче в Foo нужен такой умный указатель, который не увеличивает счетчик ссылок. а в случае когда класс удаляется, обнуляет свой указатель
Аноним 15/10/19 Втр 07:22:23 1496992238
>>1496985
Адреса указателей - наше всё.
Си-с-классами-блядок
Аноним 15/10/19 Втр 07:22:32 1496993239
гребанные указатели... как заставить это работать
std::weak_ptr<Type> t;
typedef void(Type::Func)(Args ...);

void operator()(Args ...args) const noexcept final {
if (t.lock()) {
(t->
f)(args ...);
}
}

не работает, выкидывает ошибку на *f
Аноним 15/10/19 Втр 07:27:41 1496995240
image.png (30Кб, 713x533)
713x533
>>1496993
мля, какой дебильный парсер двача. да еще и пастебин сдох

Короче, пикча

выдает ошибку, нельзя указатель на функцию (я не ебу зачем и почему - делал по гуглу)
Аноним 15/10/19 Втр 07:59:29 1497013241
Аноним 15/10/19 Втр 08:13:54 1497021242
>>1497013
а оператор копирования разве не затрет указатель Data() при yoba.mdata = data.mdata;?
Аноним 15/10/19 Втр 08:15:03 1497024243
>>1497021
На этой строчке копируется shared_ptr с увеличением счетчика
Аноним 15/10/19 Втр 08:16:36 1497025244
Ключевой момент тут в двойной косвенности. Есть некоторая коробка, на которую указывают йобы, а вот коробка уже указывает на data. Data при своей деструкции обнуляет коробку, и тогда йобы знают, что они указывают на нуль.
Аноним 15/10/19 Втр 09:31:19 1497048245
IMG201910150930[...].jpg (109Кб, 1280x719)
1280x719
Как фиксить?
Аноним 15/10/19 Втр 09:36:42 1497049246
>>1497024
но вообще у меня вроде получилось и через weak_ptr...


Хотя вот интересно, а weak_ptr::lock слишком тяжелая операция,
Аноним 15/10/19 Втр 09:44:48 1497054247
>>1497049
По-моему код сweak ptr упадёт после удаления shared ptr.
Аноним 15/10/19 Втр 10:02:28 1497066248
>>1497054
хм, надо посмотреть
Аноним 15/10/19 Втр 10:37:11 1497085249
>>1497049
Поищи скрытый конструктор shared_ptr на хабре
Аноним 15/10/19 Втр 10:55:27 1497096250
>>1496959
Если есть способы минимизировать риски, то глупо ими не пользоваться
Аноним 15/10/19 Втр 13:06:28 1497153251
>>1495729
ну смотри: если ты не используешь sharep пойнтер, то тебе самому надо будет делать подсчет ссылок руками, те по затратам на скорость исполнения все равно так же будет


Аноним 15/10/19 Втр 13:25:14 1497171252
>>1497153
Можно написать сборщик мусора
Аноним 15/10/19 Втр 13:25:52 1497174253
Ку, мне препод предлагает иследовательскую работу в анрил энжине с vr. Я в курсе про блюпринт, но с таким знанием меня потом нахер пошлют, собственно сабж, че читать что-бы начать разбираться? Опыт есть с юнити, но не с vr.
Аноним 15/10/19 Втр 13:26:22 1497175254
>>1496973
дык и используй weak_ptr
в чем проблема?
или ты не понимаешь механизма его работы?
вкратце, он не проверяется на "нулевость", а становится невалидным
а чтобы с ним поработать, нужно получить из него shared_ptr, и, если он не валидный, то этого не получится сделать..
так с ним и работают..
у тебя типичная задача для weak_ptr, только, подозреваю, ты не понимаешь как с ним работать..

Аноним 15/10/19 Втр 13:44:49 1497187255
Аноним 15/10/19 Втр 14:07:23 1497200256
Сап. Хочу с использованием boost::program_options сделать чтобы
./a.out --option 1 2 --option 2 -3 --option -3 +4 (тут именно через пробелы)
возвращало
std::vector<std::pait<int, int>>
Можно ли это сделать без большой ебли, или проще передавать значения в виде --option 1:2 и руками разбивать и разбирать?
Аноним 15/10/19 Втр 14:19:22 1497206257
>>1497174
>иследовательскую работу в анрил энжине
Это как это вообще?
Будешь открывать доселе невиданные возможности УЕЧ?
при том, что сам в нем не бум-бум, лол

Российское образование, такое российское...
Аноним 15/10/19 Втр 15:01:09 1497226258
>>1497206
Я предполагаю исследование для самого себя
Аноним 15/10/19 Втр 15:05:37 1497227259
>>1497206
И все-таки есть что-то посоветовать?
Аноним 15/10/19 Втр 19:13:53 1497360260
Котаны, хочу писать сетевое ПО на плюсах, в плюсах не полный новичок.
Какую либу для сокетов-хуёкитов посоветуете? Я писал беркли сокеты на Си, но они несовместимы с виндой (да, я линуксоид).
И вообще, как плюсы для сетевого программирования? Или лучше другой язык юзать?
P.S.: пиздон слишком медленный для этого, имхо, поэтому не предлагать.
Аноним 15/10/19 Втр 19:38:34 1497371261
>>1497360
Вроде как то можно писать на Беркли в винде с помощью костылей, но я не уверен.
А так у винды свои сокеты, их и гугли.
Аноним 15/10/19 Втр 20:26:49 1497403262
1535434878624-0.jpg (63Кб, 680x641)
680x641
Пытаюсь в будущие. Есть пул сепуляторов. Я могу вернуть future<сепулька> сейчас, а назначить конкретный сепулятор делать эту сепульку позже с помощью bind или еще чего-нибудь?
Аноним 15/10/19 Втр 20:34:22 1497411263
>>1497360
boost.beast, boost.asio, QtNetwork проще всего, для http - C++ REST SDK от мелкомягких. Первые два низкоуровневые, на них писать не очень приятно, кьют я лично использую я студент мне нравится, если кьют освоишь то вообще заебись будет, последний не использовал, но рекомендовали сеньоры-помидоры в чатах, говорят мол заебись.
Аноним 15/10/19 Втр 20:37:05 1497417264
>>1492442 (OP)
Уснул на работе после обеда. Всем похуй.
С вами такое бывало?
Аноним 15/10/19 Втр 20:41:56 1497424265
>>1497360
poco библиотеку ещё можешь чекнуть.
Аноним 15/10/19 Втр 20:44:31 1497426266
>>1497403
Отвечая на свой вопрос: тривиально, оказывается.

Аноним 15/10/19 Втр 20:44:51 1497427267
Аноним 15/10/19 Втр 20:49:17 1497431268
>>1497417
Не один раз. Задача сложная?
Аноним 15/10/19 Втр 21:48:16 1497496269
>>1497360
Винсок - калька с беркли
Аноним 15/10/19 Втр 22:01:02 1497513270
>>1497431
>Задача сложная?
Нет, задачи интересные, это мой недосып виноват.
На самом деле я очень рад, что смог найти работу с гибким графиком и хорошим коллективом.
Аноним 16/10/19 Срд 00:05:11 1497603271
Сап, двощ
Только без рофлов, какие возможности трудоустройства есть в 2к19, зная плюсы?
Что пишут, что НЕ пишут? Сетевые приложения пишут на плюсах? Заранее спс
Аноним 16/10/19 Срд 00:07:09 1497604272
>>1497603
пишут дохуя всего, включая сетевые приложения. Если ты прям хочешь вкатиться в плюсы - задрочи алгоритмы и иди в яндекс. Ну или научись сосать хуй и иди в мейлру. Потом перекатишься в нормальное место
Аноним 16/10/19 Срд 00:23:25 1497612273
>>1497174
> че читать что-бы начать разбираться?
Открой демки УЕ4 и по ним разбирайся. Куча материалов и демок в инете, гугли. В блюпринтах ничего сложного нет, кроме того, что вместо 10 строчек кода, ты лепишь мышкой паука на два экрана. Это простой скриптовый язык с ООП. ВР приложения от обычных фактически ничем не отличаются. То есть ты можешь любое анриловское приложение запустить в ВР режиме, и оно сразу заработает. Самому придется только работу с контроллерами делать. С 99% вероятности С++ тебе не понадобится - почти все делается блюпринтами. С крестами там тоже ничего сложного, кроме того, что у них там свой препроцессор и своя система сборки на шарпе, в результате чего все очень неспешно компилируется.
Самый большой гемморой будет, если вы нацелитесь на мобильные устройства вроде Oculus Go/Quest. Там мало того, что сам анрил для мобилок не очень припособлен (куча ограничений, куча багов годами висят), так еще и пидоры из фейсбука могут сломать API в любой момент, так что все снова заработает только в следующей версии УЕ4. Самсунг так вообще поддержку дропнул для своих очков. Теперь чтобы с ними работать, надо какие-то древние версии анрила качать. Короче, лучше не связывайся с мобилками или приготовься тушить жопу регулярно.
Аноним 16/10/19 Срд 00:33:48 1497617274
>>1497206
>Российское образование, такое российское...
Сейчас, бум всей этой ВР поеботы в образовании. Не только в РФ, на западе тоже. С игрушками все умерло, а университеты, наоборот, грантов набрали и лепят все подряд в ВР.
Аноним 16/10/19 Срд 01:00:47 1497631275
>>1497617
шо поделаешь
технология есть, а человеческий организм не принимает..
некоторые люди блюют после сеанса vr в шлеме, у многих болит голова, болят глаза..
по итогу в продакшон это худо проталкивается, остается только допиливать гранты в вузах


Аноним 16/10/19 Срд 01:10:53 1497634276
1.png (29Кб, 587x615)
587x615
>>1497603
Чтобы быть крестомакакой в 2019 и получать синьёрские 75к, тебе придется выучить qt+boost, уметь пилилить фронт на реакте и бэк на голанге. Такие дела.
Аноним 16/10/19 Срд 01:15:27 1497642277
>>1497631
Это все дело привычки, причём недолгой. Основная проблема вр это хуевое железо и софт. Потому что аджайлоебы не могут в хардваре
Аноним 16/10/19 Срд 01:29:40 1497648278
image.png (130Кб, 854x658)
854x658
>>1497634
Бля, где вы такие вакансии находите вообще. Глянул что в моём городе по мидлам-сеньорам, вот первое что попалось, вполне адекватные требования и зарплата в 3к, что для моей страны практически равнозначно богу, который может позволить всё.
Аноним 16/10/19 Срд 01:33:54 1497651279
>>1497634
ты же понимаешь, что это вакансия работает в 2 случаях:

1) студент без опыта, который просто хочет жрать. наверняка ему еще и зп уменьшат раза в 2
2) какой-то старый пердун, который уже впринципе не можем/хочет ничего нового учить

толковые крестоебы идут только на норм отлату, или съебуют за бугор или просто перекатываются в тот же энтерпрайз

// мимо жава макака
Аноним 16/10/19 Срд 01:39:34 1497654280
Аноним 16/10/19 Срд 01:42:54 1497658281
>>1497654
А что не так? Qt - это язык, транслирующийся в С++ программой moc.
Аноним 16/10/19 Срд 01:49:48 1497661282
>>1497651
>2) какой-то старый пердун, который уже впринципе не можем/хочет ничего нового учить
Хотел бы я посмотреть на фуллстак старого пердуна на реакте и голанге.
Аноним 16/10/19 Срд 01:51:23 1497662283
>>1497661
если реально нужен с++ - то возьмут и старого пердуна, который только с++ и знает. в придачу к нему поставят студента-зумерка
Аноним 16/10/19 Срд 02:00:24 1497663284
>>1497662
старые пердуны не знают С++, они умеют месить сиговно только
Аноним 16/10/19 Срд 02:40:22 1497673285
>>1497662
студента зачем? чтобы веки как вию поднимал?
Аноним 16/10/19 Срд 04:22:44 1497685286
а забористая у меня сегодня трава

Короче, кому надо сделать систему событий (ну например когда окошко размер изменило), без всяких сложных штук:
https://ideone.com/Pz9lwn

(это еще черновое, там надо сделать защиту на случай если класс FooBla будет уничтожен (помечено todo) и скрыть уродство Connect
Аноним 16/10/19 Срд 05:05:55 1497691287
Аноним 16/10/19 Срд 05:16:52 1497693288
>>1497685
Переделывай. Я должен сам типы параметров функций дописывать? Почему нет поддержки типа возврата?
Аноним 16/10/19 Срд 05:31:59 1497696289
>>1497693
>>Я должен сам типы параметров функций дописывать?
В EventSignal - да, для каждого события ведь свой список (для ресайза окна, два параметра, для клавы - описание клавиши и т.д.)

>>Почему нет поддержки типа возврата?
Если там будет стопятсотслушателей, то как ты их отследишь?

Вообще этот код, это некий вариант паттерна signal and slot (который например используется в QT)
Но этот паттерн довольно абстрактен и не без проблем (например мертвые указатели)

Код сейчас переложу, там решена проблема с мертвыми указателями, да и выглядит получше
Аноним 16/10/19 Срд 05:36:51 1497697290
>>1497696
Зачем ты переизобретаешь std::function?
Аноним 16/10/19 Срд 05:40:54 1497698291
>>1497696
Компилер знает, что функция Resize = void(uint32, uint32). Дальше думай.
Аноним 16/10/19 Срд 05:48:21 1497702292
>>1497697
затем что:
- а) std::function очень тяжелый и тормозной (про это где-то в гугле была статья, с бенчмарками)
- б) std::bind все равно также и выглядит
- в) не обрабатывает ситуацию, когда класс метода будет уничтожен
- г) все равно нужно делать обертку
- д) не по феншую
- е) чтобы нет?
Аноним 16/10/19 Срд 05:49:10 1497703293
>>1497698
в каком хоть направлении думать?

что если у меня там будет KeyDown(Key, bool, bool)? В
Аноним 16/10/19 Срд 06:00:36 1497705294
Аноним 16/10/19 Срд 06:07:04 1497706295
>>1497702
Понятно, стандартное ко-ко-ко велосипедостроителя про дикий оверхед стандартной библиотеки, при чем на самом деле велосипедостроитель не знает и не понимает нихуя, но уже бежит делать свою имплементацию.
Ты сначала досканально изучи, как оно работает, изучи, где именно он тормозит и почему, и, возможно, ты захочешь сделать свой вариант под твою задачу. Но скорее всего не захочешь.
А та хуйня, которой ты занимаешься, нихуя хорошего в плане профессионального развития тебе не принесет.
Аноним 16/10/19 Срд 06:07:37 1497707296
Аноним 16/10/19 Срд 06:10:15 1497708297
Аноним 16/10/19 Срд 06:17:49 1497709298
обновил код
https://ideone.com/wseHBU

- теперь оно умеет чистить память от мертвых указателей. То есть если класс слушателя будет уничтожен, никаких утечек, и ошибок памяти.
- Connect теперь выглядит получше, как std::bind

- в примере показано что на мой класс слушателя можно вешать сколько угодно функций с разными сигнатурами.


Минус: - пришлось сделать макрос __EVENTLISTENERBODY.
сначала я хотел сделать через наследование от IEventListener... но тут множественное наследование, и компилятор не уверен какой Register() вызывать. даже с подсказками там серьезный варнинг
Если кто подскажет как улучшить...

Аноним 16/10/19 Срд 06:19:35 1497710299
>>1497708
>Я на эту, как ты выразился, херню потрачу всего день, так что я ничего не теряю.
А лучше бы бабу нашел. Потому что вместо всей этой хуйни с дрочем на пост пятилетней давности можно было бы набрать аж 4 комады

$git clone https://github.com/skarupke/std_function
$cd std_function
$g++ compare_functions.cpp -O2
$./a.out
std::function: 518 ms
func::function: 515 ms
virtual function: 547 ms

И пойти отдыхать. А если и учиться, то учиться правильным практикам, а не своей поебистике.
Аноним 16/10/19 Срд 06:21:02 1497712300
Аноним 16/10/19 Срд 06:23:24 1497716301
>>1497712
Я кстати ахуел сколько там часов лекций выложили. Как все это смотреть?
Аноним 16/10/19 Срд 06:30:52 1497719302
image.png (25Кб, 897x289)
897x289
>>1497706
вообще даже не так.. не совсем понимаю наезда. Во-первых я не против STD (там вон даже std::list есть если что)

Просто всё должно использоваться по назначению, а не потому что круто-модно-молодежно.

Мой код написан конкретно под мою задачу - обработка событий от разных систем.
Аноним 16/10/19 Срд 06:37:19 1497722303
>>1497712
если там про std::function_ref - то он разве принят? у меня его в компиляторе нет.

А если самому писать - то как я написал выше - я пока не осилил шаблономагию завезенную С++11/С++14/С++17
Аноним 16/10/19 Срд 06:48:24 1497724304
>>1497719
>Мой код написан конкретно под мою задачу - обработка событий от разных систем.
Твой код написан велосипедостроителем, хуево знающим С++. И вместо изучения С++ (например, как написать свой std::function), он страдает хуйней.
Аноним 16/10/19 Срд 07:00:06 1497725305
image.png (17Кб, 456x197)
456x197
>>1497719
Хз, как по мне пикрил удобней. Уверен что можно еще больше упростить код, ибо я сам не маг.
Аноним 16/10/19 Срд 07:08:00 1497726306
>>1497725
а теперь добавь еще трех слушателей
Аноним 16/10/19 Срд 07:10:37 1497728307
>>1497724
Еще раз, зачем мне писать свой std::function?

короче, давай так - ты знаешь что такое signal and slot? Ладно, даю подсказку, он основан на observer. Даю вторую подсказку - в некоторых реализациях можно использовать внутри std::function.
даю третью подсказку - я не обертку над функциями делаю, а систему обработки событий которая должна обрабатывать неизвестные события.
Аноним 16/10/19 Срд 07:17:14 1497729308
>>1497725
и знаешь в чем еще проблема конкретно твоего пикрила, вот у тебя будет класс Input в котором будет твоя function... А потом ты захочешь добавить FooB2. И? Полезешь изменять Input чтобы написать новый Prototype? это как бы нарушение инкапсуляции, и ведет к лапше.

Аноним 16/10/19 Срд 07:19:22 1497730309
image.png (71Кб, 624x656)
624x656
Аноним 16/10/19 Срд 07:23:25 1497732310
>>1497724
>хуево знающим С++
- а ты возьми и объясни.
Аноним 16/10/19 Срд 07:28:40 1497735311
image.png (8Кб, 381x89)
381x89
Аноним 16/10/19 Срд 07:32:10 1497736312
image.png (55Кб, 781x805)
781x805
>>1497730
ошибка, зачем ты создаешь несколько Signal, если он должен быть ровно один?

Аноним 16/10/19 Срд 07:44:08 1497737313
>>1497735
твои примеры, они просто про обертку над методом. Это вообще не то.

Задача такая
- классы могут генерировать события. При этом виды событий должны добавляться в любой момент без нарушения принципов ООП (то есть не должно быть лапши, добавление нового события в свой класс не должно менять другой код)

- на каждое событие подписываются подписчики (Listener). Количество подписчиков неизвестно. это может быть один, два, стопятсот.

- когда возникает событие - подписчики должны выполнить свой код. при этом, так как события разные, то и сигнатура функций будет разной (для этого и юзается Argc...)

std::function не является решением, это всего лишь инструмент через который такую задачу можно решить. Всё равно придется писать обертку потому что:
- подписчики могут уничтожаться в любое время, их срок жизни никак не связан со сроком жизни системы генерирующей события.
- нужно хранить не одну функцию, а массив - то есть должны быть механизмы добавления, удаления и обхода
- а там где-то еще многопоточность бегает - там свои сложности
- всё это еще и не должно выбиваться из общего кодестайла, так что обертка 100% будет
- если плевать на кодестайл, то не стоит плевать на проблемы STD и DLL (кто-нибудь помнит почему в DLL интерфейсах нельзя std::string а надо char*? это из той же оперы). так что всё равно обертка.
Аноним 16/10/19 Срд 07:50:01 1497738314
>>1497710
>>1497724
>>1497735
Короче, хватит на пальцах. Раз вы не хотите знать что такое паттерн singal and slot, то я вам покажу, почему std::function - это ни разу не оно

https://github.com/adrg/sling
(здесь используется ваш std::function)

или вот
https://github.com/NoAvailableAlias/nano-signal-slot
(но здесь велосипед, да)

Я вообще решаю другую задачу, так что... странно меня обвинять в страдании хуйней, если вы даже не поняли задачу которую я решаю.
Аноним 16/10/19 Срд 07:54:46 1497739315
>>1497738
Так ты объяснять не умеешь. Никто и не говорил, что это одно и тоже. Посоветовали использовать std::function, все остальное ты сам надумал, еще и обижаешься на нашу помощь.
Аноним 16/10/19 Срд 08:06:19 1497742316
>>1497739
ну я не вижу решение через std::function, которое было бы проще и эффективней:
- за функцию у меня отвечают две строчки которые на самом деле одна (typedef) - для этого мне не надо тянуть довольно тяжелые заголовки.
По какой причине (кроме религиозной) имеет смысл одну строку кода заменять на тяжелый заголовок?

- все одно пришлось бы делать вариативный шаблон EventSignal, потому что он должен иметь разное количество аргументов под свои события.
Ну, возможно какой-нибудь шаблономагией из C++17 это и можно было бы решить - я не знаю.

- и всё равно нужно было делать решение для ситуации когда слушатель убивается раньше обработки события.
Аноним 16/10/19 Срд 09:34:09 1497759317
>>1497742
>за функцию у меня отвечают две строчки которые на самом деле одна (typedef) - для этого мне не надо тянуть довольно тяжелые заголовки.
Неправда. У тебя класс должен имплементировать интерфейс EventResizeEventListener, и это является самой большой проблемой кода. Типичное ООП в стиле 90-х: для простой задачи с простой семантикой наворачивается какая-то ебанутая иерархия классов. Алло, я хочу просто подписаться на событие, нахуя мне этот АбстрактПроксиСинглетовЭвентРисайзЭвентЛистенер и 10005000 других классов такого плана.

А на самом деле для механизма коллбэков достаточно std::function, который делает type erasure, и тогда подписываться сможет кто угодно, даже не класс вообще, лишь бы была нужна сигнатура.
Что касается "удаления листенера из списка подписок в деструкторе", то нет листенера (а есть std::function) - нет проблем. Проблема надумана.
Аноним 16/10/19 Срд 11:56:05 1497818318
>>1497759
как ты подпишешься на событие, если у разных событий разные типы и количество аргументов?


даже через std::function нужно эту сигнатуру указывать, или покажи как можно в std::function передать функцию не указывая аргументы

>>Что касается "удаления листенера из списка подписок в деструкторе", то нет листенера (а есть std::function) - нет проблем. Проблема надумана.
Это на абстрактных единорогах,

В реальном проекте листенер - это метод класса, который работает с этим классом. например:
Widget : public EventResizeEventListener;

или ты предлагаешь писать на функциях а данные перекидывать через глобальные переменные? или как?


Аноним 16/10/19 Срд 11:59:47 1497819319
>>1497759
давай по другому
вот тебе список ивентов
keyboardHandler
mouseHandler
touchHandler
gamepadHandler
windowHandler
systemHandler
uiHandler
animationHandler
soundHandler
updateHandler

у каждого из них свое количество аргументов, у одних это две переменные, у других это один класс, а у кого-то может и вообще нет аргументов

Теперь давай без имплементации и 100500 других классов покажи мне решение...

Через ООП конечно же. Ведь те, кто должны реагировать на события - это не под типы, у них своя логика, свои члены, свои методы
Аноним 16/10/19 Срд 12:04:12 1497821320
ооп-ненавистник прокрался в тред.
>>1497759
опять парадигма говно в жопу заливает?
Тебе в этой иерархии не надо ковыряться, а просто переопределить метод.
Аноним 16/10/19 Срд 12:12:59 1497828321
Аноним 16/10/19 Срд 12:51:16 1497851322
Сап, аноны. Мне нужно выполнять код, использующий библиотеки кьюта при обращении к хосту по определенному порту. Как лучше это реализовать - написать программу, которая будет запущена в фоновом режиме и какимто образом слушать этот порт, или есть возможность с помощью оси (шиндоуз) выполнять код на хосте при обращении на порт?
Аноним 16/10/19 Срд 13:03:49 1497861323
>>1497828
Чини детектор, пруфов не будет
Аноним 16/10/19 Срд 13:19:20 1497871324
>>1496993
Если что, у weak_ptr нет оператора разыменования, т.к. перед использованием содержимого его надо обязательно проверить на существование.
Надо делать так:
auto ptr = t.lock();
И если ptr не nullptr, то к нему уже обращаться как к указателю
Аноним 16/10/19 Срд 14:24:03 1497907325
⚾️⚽️☻☻‍⚕️‍
Аноним 16/10/19 Срд 16:15:37 1497986326
>>1497759
ладно, переделал
https://ideone.com/7SS1k6

Теперь все классы-слушатели наследуются всего от одного интерфейса Listener. Этот интерфейс нужен чтобы оно потом в случае уничтожения класса почистило память.

С этим пока не нашел решения (напомню, на события реагируют не функции, а методы классов, так как все данные в классах. И вот эти классы могут уничтожаться раньше чем менеджер событий, поэтому нужно чтобы менеджер выкинул повисшие указатели....
Вообще эту задачу можно решить через умные указатели без наследования, но я так и не понял в каких случаях weak_ptr не дает освободить указатель, да и конструктция в итоге уродливая)

перегружать теперь ничего не надо
Аноним 16/10/19 Срд 17:09:13 1498014327
Сап двощь,
Нужна помощь от посвященных в плюсы
Как сделать, фоновое приложение, которое активируется при зажатии указанной кнопки, с меня как всегда
Аноним 16/10/19 Срд 17:09:24 1498015328
Аноним 16/10/19 Срд 17:26:42 1498030329
>>1497612
Спасибо, а если не секрет, опыт разработки был? есть что-то из кулстори?
Аноним 16/10/19 Срд 17:38:20 1498040330
Аноним 16/10/19 Срд 18:16:42 1498063331
>>1496959
Язык такое неговно, что без нужно юзать санитайзеры.
НЕ ГОВНО СЛЫШИТЕ, НЕ ГОВНО
Аноним 16/10/19 Срд 18:23:32 1498071332
>>1498063
>не может в нормальный код
ЯЗЫК ГОВНО В ЖОПУ ЗАЛИВАЕТ АРРРЯЯЯЯЯ
Аноним 16/10/19 Срд 18:39:45 1498091333
>valgrind
>AddressSanitizer/ThreadSanitizer/MemorySanitizer
>PVS-Studio, cppcheck, cpplint, coverity
>Из Rust в данный пиздят фичу lifetime analysis
>Все большие компании юзают статический анализ и санитайзеры
ВЫ ВСЕ ПРОСТО НЕ МОЖЕТЕ В НОРМАЛЬНЫЙ КОД А Я МОГУ

Сектант, плиз
Аноним 16/10/19 Срд 18:42:42 1498092334
Аноны, хочу попробовать перекатиться в дс2 работать. Чё там у зарплат крестовиков-синьоров, в своей дыре получаю 90к, на какую сумму вообще претендовать, уровень жизни и за разный.
Аноним 16/10/19 Срд 19:05:35 1498104335
>>1498040
А как это работает? Я думал там все эти блюпринты компилятор превращает в те же самые бинари, как если бы ты на плюсах писал и это просто фронт-енд для них.

Мимо другой
Аноним 16/10/19 Срд 19:15:41 1498113336
>>1497907
блядь абу ебаный уебок какова хуя ебучие футбольные эмоджи работают но не нормальные
Аноним 16/10/19 Срд 19:23:20 1498115337
>>1498104
но не гарантирует, что сгенерированный из блюпринтов код будет таким же, как если бы ты реализовал ту же функциональность, написав всё руками. хотя и руками ты можешь написать еботу, которая работает хуже блупринта.
Аноним 16/10/19 Срд 21:08:49 1498196338

для какой практической задачи ты пытаешься сделать систему обработки событий, основанную на сигналах и слотах?

Аноним 16/10/19 Срд 21:18:43 1498207339
>>1498196
Очевидно изобретает кют.
Аноним 16/10/19 Срд 21:26:30 1498212340
>>1497986
Я вот смотрю и нихуя не понимаю, в чем смысл? При как обстоятельствах у меня будет несколько разных классов с одинаковыми методами и почему я им должен слать сигнал? Я лучше вектор из каллбеков запилю.
Аноним 16/10/19 Срд 22:02:13 1498226341
>>1498040
>Blueprint ничем не отличается от крестов
Где я это сказал?
Аноним 16/10/19 Срд 22:10:25 1498229342
>>1498030
>опыт разработки был? есть что-то из кулстори?
Периодически приходится делать простые демки в VR. Народ такое любит заказывать: походить по помещению, потыкать в интерактивные подсказки, посмотреть анимации простенькие. Анрил для этого очень удобен - все быстро накидывается мышкой, а в ВР хорошо чувствуется масштаб, особенно у всяких гигантских йоб вроде танкеров и ракет. Кулстори нет особенных.
Аноним 16/10/19 Срд 22:21:50 1498234343
>>1492694
Гораздо интереснее на какой сажают.
Аноним 16/10/19 Срд 22:46:36 1498250344
Аноним 17/10/19 Чтв 02:39:39 1498336345
>>1498212
ты не понимаешь сам паттерн signal and slot?

А для чего это надо? например в движках, или библиотеках гуи. Ты же не знаешь сколько у пользователя будет кнопок, может одна, может две, а может все 10500 на всё окно.

И все эти кнопки должны реагировать на события... Конечно это все может делать и виджет мастер, но в таком случае нарушаются принципы ООП - в таком случае мастеру придется знать о своих элементах слишком много... А что если нужно добавлять новые элементы со своей логикой? Этот путь - это путь антипаттернов - гудобжекта и спагеттикода.
(впрочем так тоже делают - нет же единого решения задачи)
Аноним 17/10/19 Чтв 03:36:06 1498341346
>>1498336
Нет такого паттерна, это абстракция придуманная QT дебилами.
Аноним 17/10/19 Чтв 04:44:02 1498349347
>>1498336
>ты не понимаешь сам паттерн signal and slot?
Я изучил вопрос и все, что нарыл, это то, что сигналы-слоты удобны тем, что позволяют пробрасывать ООП-сообщения между тредами. Если у тебя однотредная реализация, она ничем не лучше вектора коллбэков по функциональности. Можно написать пару шаблонных функций уровня "добавить коллбэк в вектор колбэков" и "пройтись по вектору коллбэков и вызвать каждого колобка", но не более того.
А вообще эта хуйня появилась когда в крестах не было лямбд.
Аноним 17/10/19 Чтв 04:54:30 1498354348
>>1498341
observer/listener? это все из одной области.

И кстати, QT тут ни при чем. Просто в QT этот паттерн юзают, но не изобрели

сигналы в бусте пришли (хм, в 2001 году чтоли?)
https://www.boost.org/doc/libs/1_63_0/doc/html/signals.html

И вроде как их изобрели чтобы в С++ завести событийно-ориентированное программирование о котором вроде уже и забыли
Аноним 17/10/19 Чтв 04:58:06 1498356349
>>1498341
и кстати в .NET это близко делегатам
Аноним 17/10/19 Чтв 05:00:21 1498358350
Screenshot2019-[...].png (10Кб, 722x521)
722x521
>>1498354
Эх, зумерки, для которых 2001 год - это ниибаца древность.
В 2001 году я в kdevelop изучал Qt, который к тому времени был уже довольно старым. Вот тебе пруф наличия там сигналов и слотов аж в 1998 году. Раньше не могу - https://download.qt.io/archive/qt/1/ на этой странице нихуя раньше нет.
Аноним 17/10/19 Чтв 05:03:30 1498361351
>>1498349
ну ты не про то. при чем тут лямбды? Во-первых, мы пишем в ООП, то есть никаких глобальных функций.

Есть классы, у классов есть методы для того чтобы работать с членами класса (инкапсуляция, все дела)
Соответсвено какой-нибудь метод может быть реакцией на событие - например игрок нажал кнопку, значит надо вызвать метод Player::Move.


И все замечательно с твоими векторами коллбеков ровно до тех пор пока класс Player не будет удален, а затем нажата кнопка. Угадай что будет? веселый дебаг, потому что твой коллбек хранит указатель на функцию класса, когда этот класс уже давно удален из памяти

Одна из задач сигналов и слотов - уметь отключать мертвые классы.
Аноним 17/10/19 Чтв 05:06:51 1498362352
>>1498358
да какая разница?

просто он лучше всего подходит для либ с гуи, где много событий, но неизвестно сколько объектов
Аноним 17/10/19 Чтв 05:25:36 1498364353
поделитесь шаблонорешением

вот есть интерфейс IClass.
От него наследован класс MyClass

А еще есть шаблонный метод <typename T> Foo(T t)

так вот. надо в Foo сделать проверку что T наследован от IClass,

Как?
Аноним 17/10/19 Чтв 05:58:03 1498365354
Аноним 17/10/19 Чтв 06:35:31 1498369355
>>1498365
а в compile-time можно? чтобы не компилировалось
Аноним 17/10/19 Чтв 06:55:06 1498370356
>>1498369
А зачем там вообще шаблон, можно же просто
foo(IClass& t)
Аноним 17/10/19 Чтв 06:57:53 1498371357
Аноним 17/10/19 Чтв 09:04:15 1498415358
>>1498369
static_assert(std::is_base_of_v<...>)
Аноним 17/10/19 Чтв 10:38:59 1498491359
Аноним 17/10/19 Чтв 12:03:00 1498537360
>>1498491
И что же такого прикольного здесь?
Аноним 17/10/19 Чтв 12:53:58 1498556361
>>1498537
На самом деле ничего, это я слепой даун.
Прости, друг, я невнимательно прочёл сообщение анона, на которое ты ответил - почему-то показалось, что ему нужен рантайм-еррор, а не компайлтайм.
Аноним 17/10/19 Чтв 14:29:33 1498600362
A a;
B b;
a+ b; - ошибка, хотя в A определено преобразование в B
operator B() {
return B(x,y);
}
Аноним 17/10/19 Чтв 14:55:37 1498624363
>>1498600
А оператор сложения B определён?
Аноним 17/10/19 Чтв 15:30:31 1498644364
>>1498624
Да. b + b норм работает. a + 3 тоже, так как определил преобразование в int
Аноним 17/10/19 Чтв 15:41:36 1498649365
>>1498644
Хотя если поменять местами слагаемые то всё работает. Странно
Аноним 17/10/19 Чтв 15:48:08 1498658366
Аноним 17/10/19 Чтв 15:51:01 1498659367
>>1498649
Значит ты определил сложение только в одном классе.
Аноним 17/10/19 Чтв 15:53:21 1498662368
>>1492444
У вас нет потому что public private protected ахахах
Аноним 17/10/19 Чтв 15:55:43 1498664369
>>1498659
Определил в обеих, не помогло.
Аноним 17/10/19 Чтв 15:55:46 1498665370
>>1498658
Класс A не знает, как ему складываться с B. Либо определи сложение в обоих классах, либо вне классов.
Аноним 17/10/19 Чтв 15:59:35 1498669371
>>1498658
У тебя для A не перегружен operator+(B). Либо перегружай, либо делай как здоровый человек operator+(A, B) и operator+(B,A) и не ебись с implicit conversion
Аноним 17/10/19 Чтв 16:01:15 1498674372
>>1498665
Не понял тебя. Зачем ему это знать, если я определил для класса A преобразование в B? Да и даже если я в А вставлю это
A& operator+(A& d){
x+=d.x;
y+=d.y;
return *this;
}
Ничего не поменяется
Аноним 17/10/19 Чтв 16:03:40 1498677373
В прочем я понял, результат преобразования rvalue, из за этого все проблемы.
Аноним 17/10/19 Чтв 16:13:19 1498686374
Я не сишник, но у нас препод очень не советует делать
using namespace std;
Почему? Чем лучше постоянно писать std::(нейм) ?
Спрашиваю просто из интереса, я лабы все равно на другом яп пишу.
Аноним 17/10/19 Чтв 16:13:19 1498687375
>>1498674
>Зачем ему это знать, если я определил для класса A преобразование в B?
А откуда ему знать, что ему надо преобразоваться в B?

И кстати, не надо возвращать у сложение B&, ты же не собираешься писать что-то вроде
b + a = 3
Аноним 17/10/19 Чтв 16:19:46 1498698376
>>1498686
Захламляет твоё пространство имён. Чтобы не возникало двусмысленности, если у тебя в коде будут функции с теми же именами.
Аноним 17/10/19 Чтв 16:24:29 1498703377
>>1498687
Так будет же лишнее копирование.
Аноним 17/10/19 Чтв 16:33:14 1498709378
>>1498703
Вообще, я даже не обратил внимания, что у тебя за странный способ сложения? a + b и так должно создавать новый объект, который ты будешь использовать в выражении, типа a = a + b. А у тебя оно с какой-то стати объект изменяет. Тебе надо было перегрузить оператор += для этого.

Вот так должно быть https://ideone.com/JRcjjp
Аноним 17/10/19 Чтв 17:47:40 1498747379
>>1498686
Потому что у вас лабы, и кроме лаб препод ничего не делал. В большом проекте using будет, но будет сидеть только там, где он действительно нужен - внутри класса, функции или вообще блока кода, и не лезть наружу. Это касается не только std, а любых псевдонимов классов и неймспейсов.
Аноним 17/10/19 Чтв 17:51:08 1498750380
>>1498747
этот прав

Печать аппрувала сениора из нвидии
Аноним 17/10/19 Чтв 18:43:30 1498773381
>>1498750
Как же ты заебал вниманиеблядствовать
Аноним 17/10/19 Чтв 19:22:16 1498789382
>>1498773
Чем я хуже кошкомальчика?
Аноним 17/10/19 Чтв 19:42:02 1498797383
>>1498747
Ты так говоришь, будто во всех проектах чуть-чуть больше лабы возникает проблема двусмысленности имен.
Даже в очень большом проекте двусмысленности может не возникнуть. А может возникнуть, хуй его знает, проблема как раз в том, что пиздец подкрадывается как всегда незаметно, и ты бежишь с горящей сракой менять все pizda на std::pizda.
Аноним 17/10/19 Чтв 20:01:20 1498802384
15700155417070.png (181Кб, 535x466)
535x466
Как убрать окно из отрисовки? Есть приложение, которое берет пиксели с хендела рабочего стола, то есть само приложение тоже в нём отображается, хочу убрать его с отрисовки, будто его и нет.
Аноним 17/10/19 Чтв 20:06:13 1498805385
PtlPT9OGWw.jpg (68Кб, 662x663)
662x663
>>1498361
>никаких глобальных функций
БЕРЁШ ГЛОБАЛЬНУЮ ФУНКЦИЮ
@
ЗАВОРАЧИВАЕШ В НЕЙМСПЕЙС
@
ГОТОВО, ТЕПЕРЬ НАША ПРОГРАММА НАПИСАНА В СТИЛЕ ООП

Аноним 17/10/19 Чтв 20:36:24 1498829386
>>1498356
Как раз делегат ближе к std::function.
Аноним 17/10/19 Чтв 20:38:33 1498835387
>>1498361
> Во-первых, мы пишем в ООП, то есть никаких глобальных функций
Ебать дебил. Посмотри последний цппкон. Там популярно объясняют, что глобальные функции нужны, и напоминают, что С++ не тоталитарная ООП помойка.
Аноним 18/10/19 Птн 00:45:30 1499008388
Аноним 18/10/19 Птн 00:54:59 1499014389
>>1498747
>В большом проекте using будет внутри класса
Using namespace внутри класса нельзя же.
Аноним 18/10/19 Птн 00:57:39 1499015390
>>1498797
> А может возникнуть, хуй его знает
Поэтому лучше не использовать using namespace в хидерах. Так оно протечет по всему проекту. Если использовать только в cpp, то будет гораздо проще исправить столкновение имен только в одном файле.
Аноним 18/10/19 Птн 01:07:15 1499017391
>>1498835
угу, страуструп всегда писал что не надо перегружать интерфейс класса, а вместо этого, по возможности, делать свободные функции-помощьники рядом с классом, объединяя это все в одну сущньность посредством пространств имен

Аноним 18/10/19 Птн 03:05:36 1499033392
198584896548733[...].png (237Кб, 699x462)
699x462
>>1499008
Я не хочу скрывать само окно, оно показывает мой рабочий стол, я хочу чтобы оно не показывалось. Прикреплю скрин, чтобы было понятнее, хочу чтобы окно вовсе не показывало себя. Могу сделать чёрный фон SetWindowDisplayAffinity(hWnd, WDA_MONITOR), но это не то, чего я хочу.
Аноним 18/10/19 Птн 03:16:21 1499036393
>>1499033
Ну передай своему окну hide перед скриншотом и разверни позже, раз уж не получается никак.
Но вообще 3 минуты гугла подсказали, что bitblt может тебе помочь.
Аноним 18/10/19 Птн 03:20:29 1499037394
>>1499036
Оно делает не 1 скриншот, а непрерывную серию (видео) в реальном времени.
Аноним 18/10/19 Птн 05:57:21 1499063395
есть лямбда функция
auto a = [](int g){return g*g;}
как поместить ее в контейнер map, который хранит пары строка - std::function<int>?
Аноним 18/10/19 Птн 09:51:25 1499120396
Screenshot2019-[...].png (345Кб, 1080x2248)
1080x2248
Screenshot2019-[...].png (222Кб, 1080x2248)
1080x2248
Анон, я давно (12лет) погромирую бекэнд на C#/F#/JS/TS/Python, хочу вкатиться в плюсы (задачи - хоббийный ардуино-ARM/ESP-ембеддед, интероп/FFI с языками выше для работы, в дальнейшем - сетевые числодробилки в сфере трейдинга, тоже для работы).

Читать книги для нюфань скучно, справочники лениво. Что из списка в шапке подойдет для быстрого вката в современный, 14/17 стандарта, язык? Там в основном книги 200x годов, а стандарт 2011 вроде внес серьезные изменения. Взялся читать Мейерса "Эффективный и современный C++" 2015, но понял что не хватает БАЗИСА.

Нашел на scanlibs пикрил 2019 года, описываются фичи в т.ч. 17 стандарта. Как думаешь, подойдет в качестве экспресс-курса, если дополнить практикой с leetcode/codewars/etc?
Аноним 18/10/19 Птн 10:40:30 1499147397
>>1499120
>Там в основном книги 200x годов, а стандарт 2011 вроде внес серьезные изменения
Да не особо они серьезные. Основные принципы не поменялись, просто стало чуть проще их применять. Читай библиографию Мейерса целиком. Если же прямо совсем лень, читай

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
Аноним 18/10/19 Птн 10:50:02 1499150398
>>1499147
> Да не особо они серьезные.
Да нет, как раз таки очень серьезные.
Аноним 18/10/19 Птн 11:09:38 1499158399
>>1499150
Только для тех, кто был в анабиозе в 2003 года.
Половина фич это перетащенный в стандартную либу буст, вторая половина - синтаксический сахарок.
Разве что лямбды реально повлияли на стиль, но это тоже сахар.
Аноним 18/10/19 Птн 11:14:40 1499160400
>>1499158
Только вот в учебниках никакого буста нет. В итоге прочтет книгу по старому стандарту, откроет код, а там лямбды, перемещение, вывод типов, умные указатели и тд
Аноним 18/10/19 Птн 11:15:30 1499161401
>>1498797
>менять все pizda на std::pizda
Ебанатство какое-то. Почему нельзя новые pizda использовать как neo::pizda?
Это получается стандартную библиотеку нельзя по-человечески юзать, а всяким левым хуйням можно, лол.
Аноним 18/10/19 Птн 11:18:24 1499163402
>>1499160
Он переживает не о том, что там чего-то нет, а то, что там что-то неверное что потребуется потом забыть. А это не так.
А то что ты упомянул есть в том Мейерсе про который он писал и посчитал что базы не хватает.
Аноним 18/10/19 Птн 11:19:23 1499164403
>>1498686
В cpp файле делай что хочешь. А вот делать так в хедере это блядство, потому что ты поломаешь код, который тебя заинклудил.
Аноним 18/10/19 Птн 11:26:04 1499168404
Что можно почитать/посмотреть о Qt с нуля, т.е. чтобы с самых основ все идеи заложенные в него пояснялись на примерах? Просто до этого на нем писал как еблан - брал гуй, а логику писал чуть ли не на простых плюсах, какая-то хуйня получается, по сути путь в никуда. Можно даже на английском, если какая-то годнота.
Аноним 18/10/19 Птн 11:41:29 1499177405
>>1499168
Макса Шлее наверни
Аноним 18/10/19 Птн 12:18:14 1499219406
Аноним 18/10/19 Птн 12:18:46 1499220407
>>1499161
Можно и так, но потом кто-нибудь въебет using namespace neo; и все пойдет по пизде. А вообще >>1499015 прав, using namespace std; в сурсах вполне ок решение.
>>1499168
Меня забавляют байтоебы, на каждом углу кричащие, что они настоящие программисты, а не какие то веб макаки, а потом идут писать десктоп, который не сильно далеко от уеба ушел по сложности задач.
Ничего не имею против тебя, плюсов или кьюти, я и сам в какой то мере байтоеб, просто вспомнил забавное наблюдение.
Аноним 18/10/19 Птн 12:45:37 1499229408
>>1499220
все таки QT десктоп, это кардинально иной уровень сложности, чем вебговно, как не крути. Но тем не менее, если бы я писал гуй - я бы его точно писать не крестах.
Аноним 18/10/19 Птн 12:52:02 1499233409
>>1499229
>это кардинально иной уровень сложности, чем вебговно, как не крути.
Где там сложность? Раскидал по форме элементы, написал обработчики событий -- все нахуй.
Разве что только если гуй -- это всего лишь фронтэнд к какой-то пиздец сложной логике вроде какого-нибудь компилятора или виртуальной машины, но пиздец сложную логику и в вебе можно придумать. У вас похоже представления о вебе прямиком из 90-х, когда пых использовали для счетчика посетителей на хоумпейдж.
Аноним 18/10/19 Птн 13:40:16 1499272410
>>1499233
> если гуй -- это всего лишь фронтэнд к какой-то пиздец сложной логике
Приведи пример где это не так? У меня вообще большинство десктоп приложений это обёртка над терминалом, чтобы кнопочки тыкать можно было. А веб говно потому-что там макаки вообще хуй положили на оптимизации и теперь какие-то одностраничные лендинги весят по 50мб и кушают по 1гб памяти, в десктопе на крестах по крайней мере я такой хуйни не замечал.
Аноним 18/10/19 Птн 14:10:35 1499302411
>>1499177
Прям годнота? Я в 16 году начинал читать актуальное на тот момент издание, но по какой-то причине дропнул. Ок, попробую, спасибо.
Аноним 18/10/19 Птн 14:36:16 1499321412
>>1499219
Неужели чтобы такое реализовать на ассемблере потребовалось бы такое огромное количество строк кода?
Аноним 18/10/19 Птн 14:41:15 1499327413
>>1499321
ну мапа то - дохуя сложный контейнер
Аноним 18/10/19 Птн 14:46:04 1499335414
>>1499302
Шлее о многих аспектах не рассказывает, или говорит вскользь. В целом для ознакомления заебись, считай прочитаешь ее за неделю, поделаешь примеры из нее, а дальше нужно будет садиться и писать что-то самому. У кьюта огромный плюс - охуенная документация, доступная прямо из иде, с примерами и описанием каждой функции. Как почувствуешь готовность - можешь почитать как там мок устроен, нахуя ты эти странные макросы вставляешь куда попало и почему функциям-сигналам не нужна реализация. Хотя да, кьют часто ругают и не зря, хотя и в вакансиях я его вижу относительно часто. Лично мне как студентоте было заебись написать что-то полезное, а не дрочить байты и лабы в С с классами.
Аноним 18/10/19 Птн 14:56:31 1499341415
>>1499335
> У кьюта огромный плюс - охуенная документация,
Хочу рассказать, что я делал два примера по "документации" и они нихуя не работали, поскольку в самом доке пропускали части кода, приходилось еще и сорсы примера открывать. Неудобно.
Но ты не про примеры говоришь. А сама документация как референс да, неплохая.
Аноним 18/10/19 Птн 14:58:16 1499342416
>>1499341
Ну не знаю, я код модели для тривьюхи практически полностью себе в проект впихал, и работало заебись, разве что немного модифицировал под свою задачу. Не помню такого, что код прямо не работал, разве что действительно там где-то пропускают часть кода для упрощения.
Аноним 18/10/19 Птн 15:42:40 1499357417
>>1499229
QT - хуйня для вебмакак, нормальные люди пишут на winapi
Аноним 18/10/19 Птн 16:10:35 1499373418
>>1499357
>нормальные люди пишут на winapi
да ладно
если сейчас хочешь писать для развлечения (а натив под винду для заработка уже не попишешь, нет работы), то гораздо интересней писать uwp приложение
winrt - замечательно спроектированная нативная библиотека
Аноним 18/10/19 Птн 16:12:55 1499374419
>>1499373
>(а натив под винду для заработка уже не попишешь, нет работы)
геймдев
Аноним 18/10/19 Птн 16:17:42 1499380420
>>1499357
на винапи уже никто давно не пишет полноценные оконные приложения.
Аноним 18/10/19 Птн 16:18:35 1499382421
>>1499168
отделяй гуй от реализации всегда
просто представь, что у твоей проги будет 2 интерфейса - командной строки и гуй
те пишешь сначала ядро, из него будет торчать открытый api интерфейс
Аноним 18/10/19 Птн 16:22:52 1499389422
>>1499160
>а там лямбды,
лямбы вообще синтаксический сахарок, для того чтобы не писать свободные функции или функторы в случае когда они будут применяться на один раз..

Аноним 18/10/19 Птн 16:24:06 1499391423
kjk в чем смысл?
Аноним 18/10/19 Птн 16:25:48 1499392424
>>1499160
> вывод типов
вывод типов вообще то в языке уже очень давно, как только появились шаблоны
вывод типов работал для шаблонов свободных функций и для функций-членов классов
соответственно и правила вывода типов уже тогда были и были хоть и сложными, но интуитивно понятными
и в новых стандартах эти правила во многом применимы и на вывод типа выражения (auto, deltype и прочее), те ничего особенно нового..
Аноним 18/10/19 Птн 16:32:53 1499399425
>>1499160
>умные указатели
в стандарте 98 года уже был один умный указатель, а вообще на конец 90 уже были написаны книги, половина объема которых была посвящена теме умных указателей, например книга джеффа элджера "библиотека программиста с++" (неудачное название у книги, у александреску "современное проектирование на с++" тоже не очень удачное название было)
потом была уже методика raii, которая закрывала часть задач умных указателей
Аноним 18/10/19 Птн 16:35:47 1499404426
>>1499160
и вообще, если крупно обобщить, то важнейшее семантическое изменение в языке - это появление механизма перемещения
в будущем (если язык не умрет) это сильно изменит подход к проектированию многих библиотек
Аноним 18/10/19 Птн 16:38:04 1499406427
>>1499147
а я вот из тех, кто как раз прочитал все книги майерса (просто для развлечения)
и вот самой полезной и удачной у него считаю последнюю книгу, где он обсуждает тонкости стандартов с++11 и с++14
а предыдущие книги - это, блин, такая простота на данный момент что просто даже не знаю
Аноним 18/10/19 Птн 16:41:06 1499409428
>>1499120
я бы тебе вообще не советовал изучать кресты, пиши (и зарабатывай) на том что ты знаешь
а для интереса продолжай грызть f#, он прикольный, языки ml-семейства вообще прекрасно подходят для развлечения

Аноним 18/10/19 Птн 16:42:33 1499410429
>>1499063
не очень понятно зачем тебе для этого лямбды
достаточно именованой функции, и указателя на нее помещенного в мапу

Аноним 18/10/19 Птн 18:09:07 1499464430
>>1499409
F# для развлечения я уже знаю, на работе втащить его в прод довольно сложно: в финансах все довольно консервативненько, еще и спецов на рынке мало. Я много дотнетчиков прособеседовал (ок 50 за последний год), у нескольких в резюме был F#, и знаний у всех меньше, чем у меня. Да что там говорить, даже питониста толкового х найдешь, те что меньше 200 просят нихрена не знают, а остальные как будто в ai/ml или гошку укатились

Плюсы они уже вот тут, куча либ и сервисов на работе, и несколько отладочных плат дома.

А деньги мне больше не от языков программирования приходят, а от болтовни, сроков и результатов моей команды и порядка в джире. Тимлид же лул.
Аноним 18/10/19 Птн 18:21:58 1499469431
У меня 2 проблемы. Во первых почему gcount у меня всегда равен нулю(читаю строки гетлайном из файла), а во вторых почему tellg не работает? Выдает рандомные числа не совсем рандомные на самом деле, они рандомно отличаются в пределах 10 от того что считает str.size()+2
Аноним 18/10/19 Птн 18:30:17 1499473432
>>1499464
не забивай себе башку еще и крестами
щас только книга по стандартной библиотеке - 1200 страниц, книга по шаблонам - 850 страниц, а там ничего особенного не написано, чисто вводные книги в тему
сам 17й стандарт - 1650 страниц, лол
нафиг тебе это надо

Аноним 18/10/19 Птн 20:04:19 1499521433
Аноним 18/10/19 Птн 20:10:04 1499527434
>>1498092
Жидбрейнс платит 200+
Аноним 18/10/19 Птн 20:15:58 1499530435
Аноним 18/10/19 Птн 20:54:36 1499550436
15358269748900.png (248Кб, 591x442)
591x442
Приветствую. Кто-нибудь знает, почему assert(char(170) == int(170)) падает? ЯННП.
Аноним 18/10/19 Птн 21:06:48 1499560437
>>1499550
Потому что char обычно знаковый -128:+127.
Аноним 18/10/19 Птн 21:07:20 1499561438
>>1499550
Аналогично char(0b10101010) != 0b10101010
Аноним 18/10/19 Птн 21:10:29 1499566439
>>1499560
Ты мудр, спасибо, чувак
Аноним 18/10/19 Птн 21:54:10 1499602440
Не нашел как мне усыпить программу на (60/(45*4)) секунд, работаю под линукс, нашел только sleep() но эта функция принимает только секунды, подскажите как сделать задержку.
Аноним 18/10/19 Птн 21:56:25 1499605441
>>1499399
>в стандарте 98 года уже был один умный указатель
Это был плохой указатель и он ушел от нас.

>>1499602
using namespace std::chrono_literals;
std::this_thread::sleep_for(20ms);
Аноним 18/10/19 Птн 21:57:59 1499609442
>>1499602
usleep
ты гуглить не умеешь?
Аноним 18/10/19 Птн 22:03:01 1499616443
>>1499063
Просто, без задней мысли.
Аноним 18/10/19 Птн 22:03:23 1499618444
>>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'

Аноним 18/10/19 Птн 22:09:10 1499624445
>>1499609
Он не работает, я пробовал.
Аноним 18/10/19 Птн 22:10:11 1499625446
Аноним 18/10/19 Птн 22:11:43 1499627447
>>1499602
usleep принимает микро или наносекунды, не помню
Аноним 18/10/19 Птн 23:33:08 1499672448
>>1499605
>Это был плохой указатель и он ушел от нас.
хех ты даже щас и не вспомнищ чем он был плох
он справлялся со своими задачами и все

Аноним 18/10/19 Птн 23:48:36 1499682449
>>1499625
Мб он компилит ещё не под std=c++17
Аноним 19/10/19 Суб 01:18:35 1499720450
>>1499672
Ну не то чтоб плох, но до введения семантики перемещения разрушающее присваивание выглядело пиздец как странно.
Аноним 19/10/19 Суб 20:58:31 1500217451
>>1492523
>геттеры и сеттеры
>как нормальное ооп
Это же ублюдство пиздец,
В простой хуйне типа точки или вектора проще ебнуть структуру, а в каком-нибудь YobaCalculator вся логика должна быть заключена внутри объекта, чтобы тупо загнать через конструктор сеттинги какие-нибудь и дёргать его, как абстрактный черный ящик.
Аноним 19/10/19 Суб 20:59:34 1500219452
Аноним 20/10/19 Вск 07:15:39 1500433453
Задал вопрос в треде для ньюфаней, но продублирую и здесь.

Ребят, если интересна робототехника, а точнее программирование дронов и небольших роботов, ну и сюда же разработка их беспилотного режима, это какие языки? Питон и С++?
Аноним 20/10/19 Вск 07:27:53 1500434454
Аноним 20/10/19 Вск 07:28:38 1500435455
>>1500434
рую ссылку, то тебе нужно открыть вторую ссылку и посмотреть на адрес бар, а затем зайти в первую ссылку и совершить поиск полученной на предыдущем шаге информации.
Аноним 20/10/19 Вск 09:21:08 1500459456
>>1500433
>очнее
У нас в вузе такое чисто на питоне делали, мб там либы какие-то плюсовые есть уже, хуй знает.
Аноним 20/10/19 Вск 09:59:19 1500463457
Аноним 20/10/19 Вск 13:50:35 1500576458
>>1494246
http://www.cplusplus.com/reference/sstream/stringstream/
Можно извратиться используя стрингстримы. Это тоже самое как вывести переменную в стандартный выход, но ето типа стека. Т.е. загоняешь переменную в стринстрим, она им хавается и переваривается в строку, а потом высираешь это на экран.
Этой хуйнёй можно даже типы перегонять в друг друга через стринги. По ёбнутому конечно, но работаети.
Аноним 20/10/19 Вск 14:38:17 1500616459
>>1500459
"сделать что-то на питоне" это означает написать кучу скриптов, вызывающих для работы сишный и крестовой код

Аноним 20/10/19 Вск 16:01:04 1500692460
>>1500433 во первых тебе надо знать целевую архитектуру, например это АРМ, другим там пока не пахнет. Даташиты на камни. Электротехника. Энкодеры ололо, шины и прочая низкоуровневая хрень с байтоеблей.
Язык Си. Можно использовать С++ как Си с классами, просто для удобства. Но про STL забудь, у ембед систем памяти с гулькин хуй.
Если ты ещё не понял, самого кодирования в робототехнике не так много, как кажется, гораздо больше тебе понадобиться смежных знаний.
Аноним 20/10/19 Вск 17:19:04 1500809461
Как получать нажатия даже если мое окно свернуто? Хочу делать скриншот при нажатии принтскрина, то оно работает, только если мое окно активно. Есть методы получше глобал хука?
Аноним 20/10/19 Вск 19:18:25 1500907462
>>1500692
> Но про STL забудь,
Есть же etlcpp и прочие
> у ембед систем памяти с гулькин хуй.
64-128кб уже достаточно доступные, чтоб об этом не переживать так сильно
Аноним 20/10/19 Вск 20:39:08 1500961463
>>1500907
Если памяти чуть побольше - сразу вешаем на камень RTOS, чтобы не писать велосипеды.
Аноним 20/10/19 Вск 20:47:28 1500969464
>>1500616
>то на питоне" это означает написать кучу скриптов, вызывающих для работы сишный и крестовой код
>
Какой язык такие и программы
Аноним 20/10/19 Вск 21:16:58 1501004465
Аноним 20/10/19 Вск 21:26:44 1501011466
Как отформатировать код в VS?
Аноним 20/10/19 Вск 21:32:38 1501017467
>>1501011
Пиздец. Программирование - это не твоё.
Аноним 20/10/19 Вск 21:43:18 1501018468

>>1501017
А по делу есть что сказать?
Аноним 20/10/19 Вск 21:46:04 1501020469
>>1501018
Ты настолько туп, что в гугл не умеешь?
Аноним 20/10/19 Вск 23:22:31 1501076470
>>1501004
Так я на Winapi пишу, нахуй мне QT
Аноним 20/10/19 Вск 23:52:21 1501103471
Аноним 21/10/19 Пнд 00:28:05 1501121472
>>1501020
Ctrl d и ctrl k не срабатывают.
Аноним 21/10/19 Пнд 00:30:30 1501122473
>>1501076
извини, у меня было ощущение, что ты сам не знаешь, на чем пишешь, поскольку ты даже не написал на чем. а че винапи не гуглится?
Аноним 21/10/19 Пнд 01:31:25 1501163474
>>1501122
Гуглил, там говорят кидать глобальный хук, я не хочу, потому что тогда приложение всегда будет требовать права администратора.
Аноним 21/10/19 Пнд 07:22:24 1501242475