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


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

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

C++ №87 /cpp/ Аноним 16/05/19 Чтв 18:33:51 14013091
image.png (28Кб, 528x528)
528x528
16/05/19 Чтв 19:50:16 14013602
Аноним 16/05/19 Чтв 20:03:05 14013713
Аноним 16/05/19 Чтв 20:55:25 14014104
>>1401360
Пиздишь, номера еще в 2016 за сотню перевалили.
Аноним 16/05/19 Чтв 20:57:33 14014115
Че там с концептами, крестухи? К 23 году завезут?
Аноним 16/05/19 Чтв 21:49:50 14014526
Ананасы, поясните.
Всегда ли нужно использовать указательный на базовый класс?
Аноним 16/05/19 Чтв 21:50:08 14014537
>>1401411
Будет в 20 стандарте
Аноним 16/05/19 Чтв 21:52:27 14014568
Аноним 16/05/19 Чтв 22:19:46 14014809
>>1401456
Почему так стоит делать иногда?
Аноним 16/05/19 Чтв 23:01:09 140151010
Анончики, подскажите какой-то более-менее большой проект, который можно реализовать в соло за 2-3 месяца всё лето свободен на С++/Qt. До этого чего-то серьёзного не писал, какие-то калькуляторы, шахматы и обработчики данных еще пару ботов для телеграма. Сейчас чувствую что очень не хватает практики, особенно современных крестов. С матаном/линалом знаком, дискретка на базе первого курса. Было бы очень неплохо, если бы проект был связан с компьютерными сетями и протоколами передачи данных
Аноним 17/05/19 Птн 00:41:54 140155811
Аноним 17/05/19 Птн 01:19:49 140158312
>>1401510
Какую-нибудь мини-ide для языка программирования.
Аноним 17/05/19 Птн 01:44:23 140159413
>>1401480
чтобы роботала магия виртуальных функций, чтобы был динамический полиморфизм
Аноним 17/05/19 Птн 11:28:30 140173414
>>1401360
91, со всеми пропусками.
Аноним 17/05/19 Птн 15:28:05 140183915
>>1401452
Лучше мизинец, его не жалко.
Аноним 17/05/19 Птн 20:03:13 140198416
>>1401558
Бля, видел в треде идей анона, но чёт даже не подумал об этом. Спасибо анончик.
>>1401583 - над этим подумаю, но сама задача какая-то не очень интересная по крайней мере для меня.
Аноним 18/05/19 Суб 03:55:05 140229817
>>1401984
писать борду на плюсах - это охуенная идея, ты в своём уме?
18/05/19 Суб 10:13:59 140234218
>>1402298
А в чём может быть проблема? В Qt достаточно удобные средства для работы с сетью, и клиент-серверная модель уже реализована.
Аноним 18/05/19 Суб 12:06:41 140236319
image.png (25Кб, 745x199)
745x199
image.png (43Кб, 817x363)
817x363
>>1401309 (OP)
Ребята я давно не спал и плохо говорить по-русски, но по другому я не могу. Я пишу some shitty code в IDE MS Visual Studio 2015, мне нужно чтобы когда я подгружаю в DataGridView свои данные из разных таблиц БД, этот элемент не менял свои размеры, нужно чтобы ширана столбцов растягивалась или сужалась но в совокупности всегда была одна ширина элемента. На текст в таблице не обращайте внимания это рыба.

Пример, пик1. Все заебись, таблица ровно такого размера как надо.

Пик 2. По ширине пиздец, таблица уменьшилась. На высоту похуй.


Я пробовал играться с автосайзом для строк и столбцов, а также принудительно ставить размеры элемента после подгрузки -- толку 0.

Надеюсь есть способ сделать то что нужно.
Аноним 18/05/19 Суб 12:19:23 140236620
Аноним 18/05/19 Суб 13:09:06 140238321
>>1402366
Пишу я на C++ обычно в консоли с чистым CLI компилируя gcc, тут же доебались со своим интерфейсом и загнали в студию от мелкомягких. Писать интерфейс я привык в Delphi от еще борланда и это нечто от редмонда вызывает у меня растерянность и сонливость.

Спасибо. Все работает.
Односвязный список Аноним 18/05/19 Суб 17:15:25 140252322
240F132015766lT[...].jpg (16Кб, 328x240)
328x240
Я даун и прошу помощи. Такая задача.
Узел списка Комната с член-данными ширина (float), длина (double) и цвет стен (char *). Реализовать член-функцию «получение элемента с заданным порядковым номером»

Я бы хотел добротно заплатить тому, кто мне поможет, но так как я нищий и на 1к рублей мне жить еще месяц, могу лишь закинуть 50 рублей, только прикрепите сразу свой кошель в ответу, чтоб я левым людям не кинул.
пикрандом
Аноним 18/05/19 Суб 18:12:26 140254323
>>1402523
В односвязном списке по определению же у каждого элемента есть указатель на следующий элемент.
https://prog-cpp.ru/data-ols/
Тут описано, как инициализировать и выводить все элементы, если тебе нужен конкретный, просто сделай цикл for(в теле цикла переход через указатели от элемента к элементу), пока не дойдет до элемента с нужным номером, и потом выведешь значения, на которые указывает полученный указатель.
Аноним 18/05/19 Суб 18:24:22 140254824
>>1402523
> ширина (float), длина (double) и цвет стен (char *)
Ты долбоеб?
Аноним 18/05/19 Суб 22:42:02 140267225
Аноны, можно где-то скачать старые build tools от визуал студии, скажем, 2005 или 2010 года? Не гуглится нихуя, жопа горит, щас пойду воровать, убивать, йебать гусей.
Аноним 18/05/19 Суб 22:53:48 140267926
Аноним 18/05/19 Суб 23:00:11 140269127
>>1402679
Уже качаю полную студию, 5 гигабайт. Еле сдерживаюсь, чтоб не побежать в город обзывать каждого первого потребителя продукции МенструалсофтКорпорейшн говноедом и получать за это пизды. Это ж как, сука, надо смерти не бояться, чтоб не выпускать инструменты без IDE отдельным релизом.
Аноним 18/05/19 Суб 23:20:39 140270628
>>1402691
бля, я долбоеб, не там галочку в торренте постаивл.
1.3 гига студия 2005 весит
fix
Аноним 18/05/19 Суб 23:30:08 140271429
071.jpg (97Кб, 660x413)
660x413
Аноним 18/05/19 Суб 23:45:32 140272430
Нахуя можно делать приватные виртуальные функции при наследовании?
Аноним 18/05/19 Суб 23:53:54 140273531
Посоны, не гоните, просто не сталкивался с такими кейзами. Есть мой собственный класс, нужно по входным данным динамически создавать представителей этого класса, потом загонять их в массив и работать с ними. Как это реализуется?
Аноним 18/05/19 Суб 23:55:14 140273732
>>1402735
Приведи пример данных и что у тебя за класс?
Аноним 19/05/19 Вск 00:14:53 140274633
Аноним 19/05/19 Вск 01:00:31 140276734
>>1402735
template<class T, class... Args>
void do_smth(std::size_t n, Args&&... args)
{
T^^ arr = new T^[n];
std::for_each(arr, arr + n, [&](auto& p){p = new T(std::forward<Args>(args)...);});
// do something
std::for_each(arr, arr + n, [&](auto& p){delete p;});
delete[] arr;
}
Домик замени на звёздочку.
Аноним 19/05/19 Вск 01:03:48 140276935
>>1402767
Пример применения

struct A
{
A(int a, float b, char c) : a_(a), b_(b), c_(c){}
int a_;
float b_;
char c_;
};

int main()
{
do_smth<A>(10, 1, 2, 'a');
}
19/05/19 Вск 01:30:31 140278936
>>1402724
>Нахуя можно
Постановка вопроса наивная, пиши прямо -- "нахуя нужно".
>приватные виртуальные функции при наследовании
Имеется в виду нечто с комплексной характеристикой, "грубо говоря" свойства перечисляются. Что же, начнем читать как компилятор "с лево на право" попутно выстраивая собственный комплексный ответ
>при наследовании
Очевидно речь идет о ООП, какое именно наследование не указано, тогда берем самый простой "публичный одиночный" вариант, таким образом что - то закладывается в описание класса, дабы иметь возможность унаследовать сие в потомках данного СК.
>виртуальные функции
Опять же, ЭМНИП, используются для явного указания компилятору необходиомсти вызова тех или иных функций относящихся к тем или иным классам при преобладании ссылок. Что очень кстати при наследовании методов.
>приватные
Ну, а, собственно, с хуя ли, у нас, в ООП, должны, появляться функции, работающие с датой экземпляра класса напрямую, при этом, не являющимися приватными ? Опять же стоит учитывать особенности наследования.

В общем - то, нужно это все, как и все остальное в языках, в т.ч объектно ориентированных, дабы ты мог описать решение конкретной, иногда достаточно специфичной , задачи на пальцах компьютеру. Задачи, в которых релевантно использование ООП в целом, как - правило, имеют те или иные нотации в отношении того что должно наследоваться, куда, как работать в связке/ссылке на объекты в т.ч иных и родственных классов, вот для того чтобы полно описать решение, язык предоставляет соответсвующие способности.
19/05/19 Вск 01:33:15 140279137
>>1402789
>"с лево на право"
наоборот
>преобладании ссылок
переопределения

быстрофикс
Аноним 19/05/19 Вск 11:38:11 140288938
У меня в VS при объявлении шаблонного типа переменной (template<class T>) ошибка
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
1>C:\Users\sudo\source\repos\Множества символов\Debug\Множества символов.exe : fatal error LNK1120: неразрешенных внешних элементов: 1
Как исправить?
Аноним 19/05/19 Вск 11:42:10 140289139
А, всё, это говно, оказывается, обязательно в программе должно быть где-то использовано хоть как-то, тогда нету ошибки.
Аноним 19/05/19 Вск 12:16:17 140290640
>>1402724
>Нахуя можно делать приватные виртуальные функции при наследовании?
герб саттер "новые сложные задачи на с++", задача 18
детальный ответ на твой вопрос
если кратко - есть способы проектирования архитектуры приложения, когда вообще нет открытых виртуальных функций, такой подход сохраняет популярность
Аноним 19/05/19 Вск 12:30:13 140291341
Анон, как ты считаешь количество чисел в файле пока не конец строка?
Аноним 19/05/19 Вск 12:31:53 140291542
>>1402913
>не конец строки
самофикс
Аноним 19/05/19 Вск 12:36:31 140292143
>>1402913
> Анон, как ты считаешь
Нахуй мне таким заниматься?
Аноним 19/05/19 Вск 12:37:41 140292244
>>1402921
А как ты получаешь длину строки для создания динамического массива, если ты не знаешь заранее сколько будет элементов в массиве?
Аноним 19/05/19 Вск 12:40:52 140292445
>>1402922
С запасом беру, очевидно же.
Аноним 19/05/19 Вск 12:41:15 140292746
>>1402924
Это очень сильно тупо.
Аноним 19/05/19 Вск 12:45:12 140293147
>>1402523
Это задача уровня 8 класса, решающаяся одним циклом.
Аноним 19/05/19 Вск 12:46:03 140293448
>>1402931
Так покажи же пример или ссылку на него!
Аноним 19/05/19 Вск 12:46:53 140293849
>>1402931
Да и с каких пор в школах учат программирование? Ещё и в восьмом классе. Да ещё и на крестах.
Аноним 19/05/19 Вск 12:48:27 140294050
>>1402922
Зачем мне знать сколько элементов будет в массиве если он динамический?
Аноним 19/05/19 Вск 12:49:48 140294251
>>1402940
Откуда динамический массив будет узнавать насколько ему расширяться, если ты ему не предоставляешь конкретное число, получаемое прямо во время работы программы?
Аноним 19/05/19 Вск 12:53:07 140294452
>>1402942
Зачем ему знать на сколько расширяться если он может просто увеличиться в джва раза?
Аноним 19/05/19 Вск 12:54:56 140294653
>>1402944
У тебя массивы прям как твоя мамка, а твой код наверняка может потягаться даже с поделиями индусов.
Аноним 19/05/19 Вск 13:08:37 140296054
2.jpg (70Кб, 387x693)
387x693
Аноним 19/05/19 Вск 13:13:53 140296755
>>1402960
Хотя у меня там цвет стен не char, а string, но ты это поправишь.
Аноним 19/05/19 Вск 13:20:58 140297156
Аноним 19/05/19 Вск 13:23:08 140297557
>>1402971
Язык благодаря которому контент на интернет страницах стал динамичным.
Аноним 19/05/19 Вск 13:34:52 140298758
Аноним 19/05/19 Вск 13:37:41 140298859
>>1402971
язык 19ти летних полубогов, получающих на изичах 3к в месяц на удаленочке
крестоблядки же на такую зп годам к 35 выходят и то если вьябывать
Аноним 19/05/19 Вск 13:39:29 140299160
*19-ти летних манябогов
Аноним 19/05/19 Вск 13:52:00 140300161
Нет, ну так-то он прав. C++ это либо легаси, либо рокет саенс. Но рокет саенсом занимаются единицы из сотен тысяч, а остальные поддерживают какое-нибудь старье, написанное еще в то время, когда C# и Java не доминировали бэкенд и десктоп. Тем более когда джунам за JS или тот же Go платят больше, чем за C++ мидлу.
Аноним 19/05/19 Вск 13:53:45 140300462
>>1403001
Рокет саенс это просто C, так что круг сужается еще больше.
Аноним 19/05/19 Вск 14:51:16 140311963
>>1402714
Мне надо скомпилировать код, использующий библиотеку, которая в свою очередь скомпилировано майкрософтовским компилятором. Ставить для этого Шиндовз10 с .NET Framework 4.6 как-то неохото. Я вообще ни шага в разребании этой задачи не могу сделать, не пробубнев четырежды "виндоюзеры говноеды".
Аноним 19/05/19 Вск 15:17:35 140316464
Возможно ли как-то при выполнении определённого условия просто в условии объявить переменную типа, который задаёт условие, и использовать эту переменную дальше в программе? А то они обозначаются как локальные и приходится код копипастом растягивать.
Аноним 19/05/19 Вск 15:19:04 140316765
Аноним 19/05/19 Вск 15:19:13 140316966
image.png (46Кб, 694x324)
694x324
Как использовать сраный OpenGL? Везде в примерах пишут
> #include <GL/glut.h>
Но у меня тупо нет этого файла. Что делать-то?
Аноним 19/05/19 Вск 15:20:41 140317167
Аноним 19/05/19 Вск 15:20:45 140317268
>>1403169
Скачать библиотеку glut, очевидно
Аноним 19/05/19 Вск 15:22:59 140318069
>>1403172
Если она не установлена, почему здесь присутствует папка GL? Тут есть все, кроме glut.h.
Аноним 19/05/19 Вск 15:23:38 140318170
>>1403171
Это то, что твои пальцы должны набрать в гугле перед тем, как пойти нахуй, долбоёб.
пиздец, при поиске ответа на вопрос не использовать гугл как первую инстанцию. выпились
Аноним 19/05/19 Вск 15:24:08 140318371
>>1402922
Можно считывать данные посимвольно и каждый шаг расширять массив на 1 элементбудет выдяляться новыц массив нужной длины и туда будет уопироваться содержимое старого - такое себе.занятие
Можно выделять память блоками по 256 байт например. А потом еще можно обрезать. А можно не обрезать, если тебе памяти жалко.
Аноним 19/05/19 Вск 15:27:35 140319072
Аноним 19/05/19 Вск 15:28:00 140319373
>>1403180
Может потому что glut уже лет двадцать не поддерживается? Или потому что это ОТДЕЛЬНАЯ БЛЯДЬ БИБЛИОТЕКА? Где ты вообще откопал код, который юзает glut? Ты хочешь буквы рисовать?
Аноним 19/05/19 Вск 15:28:51 140319574
Аноним 19/05/19 Вск 15:29:43 140319775
>>1403180
GL это хедеры для опенгла.
Но те клоуны туда закинули glut.h по фану.
Аноним 19/05/19 Вск 15:33:45 140321176
>>1403195
Он хоть и грубый, но я с ним согласен. Тебе прямо сказали что надо гуглить, и ты вместо гугла задал вопрос анону. Даже если не брать во внимание саму тупость этой ситуации, как думаешь, кто тебе быстрее ответит - гугл или анон?
Аноним 19/05/19 Вск 15:36:23 140321777
>>1403193
>Где ты вообще откопал код, который юзает glut?
Статья на хабре... 2011 года. Не обратил внимания на дату. Как я понял, сейчас вместо glut юзают freeglut, так? Мне нужно его самостоятельно собрать?
https://habr.com/ru/post/111175/
Аноним 19/05/19 Вск 16:00:36 140326578
>>1403217
Вроде там бинарники выкладывают, но лучше конечно самому собрать. А лучше, как анон выше писал, перейти на GLAD
Аноним 19/05/19 Вск 16:08:54 140327279
>>1403265
Спасибо. Вот только бинарников я не нашел, но зато смог с горем пополам собрать эту срань с помощью CMake. А чем GLAD лучше freeglut?
Аноним 19/05/19 Вск 23:44:42 140354780
Здрасте, можете пояснить за tls1.3, публичный, приватный и CA сертификаты, откуда они берутся, и что надо иметь клиенту, чтобы взаимодействовать с сервером?
Аноним 20/05/19 Пнд 11:42:33 140368081
Из C++ в C# пжпжпж
void __fastcall TForm1::Button1Click(TObject Sender)
{
Memo1->Lines->Clear();
int A[4]; int B[5];
int m;
String One, Many;
for(int i = 5000; i < 10000; i++)
{
One = IntToStr(i);
for(int j = 0; j < 4; j++)
A[j] = StrToInt(One[j + 1]);
if(A[0] & 1) continue;
m = i 2;
Many = IntToStr(m);
for(int j = 0; j < 5; j++)
B[j] = StrToInt(Many[j + 1]);
if((B[1] == A[3]) && (B[2] == A[0]) && (B[4] == A[0]))
{
Memo1->Lines->Add("ОДИН - " + One);
Memo1->Lines->Add("МНОГО - " + Many);
Memo1->Lines->Add("");
}
}
}
Аноним 20/05/19 Пнд 11:49:06 140368782
БЛЯДЬ, ПОМОГИТЕ ДЕЛЬФИНИСТУ В СТУДИИ ОТ МЕЛКОМЯГКИХ.

Какого блядь хуя ей надо - то, а ? В Delphi я спокойно могу из одной формы, например, ебануть visible другой формы. Forname.visible ... траляля. Здесь же, сука, нихуя не получается, это говно ноет и срет ошибками. Как мне их одной формы убить другую, изменить что - то хотя бы
Аноним 20/05/19 Пнд 12:35:26 140370383
>>1403687
Крудодебил такой крудо и такой дебил.
Аноним 20/05/19 Пнд 12:37:13 140370484
>>1403703
Вот сука, банально блядь. Как же в этой ссаной студии все через депу сделано сука. Берем елемент нейм, хуяим ему метод- событие. Переименовываем элемент нейм. А событие так и останется с прошлым именем. Вот блядь, какой даун это придумол сука.
Аноним 20/05/19 Пнд 12:38:27 140370585
>>1403704
С этими же формами. Какого хуя у меня в таком хуевом object basic это делается одной строчкой, а здесь я должен гуглить, объявлять их друг у друга, ебаться с сылками и статичностью.

Тьфу, блядь, ебля ради ебли as is
Аноним 20/05/19 Пнд 13:10:29 140372886
https://pastebin.com/hNBif4t1 пытаюсь умножить матрицы используя многопоточность,почему так медленно или так должно быть.При размерности 1к обычное умножение занимает примерно 0,1 миллисекунду,а многопоточное около 250мс(если я время правильно засекаю)
Аноним 20/05/19 Пнд 15:06:47 140379787
Поясните, есть такой код:
std::for_each(iter.begin(), iter.end(),
[] (auto element)
{
...element...
});
При этом в лямбде сам элемент, а как использовать не элемент, а его итератор?
Аноним 20/05/19 Пнд 15:14:55 140380288
Аноним 20/05/19 Пнд 15:16:30 140380389
>>1403797
Захвати iter=vec.begin() в области захвата и делай в теле лямбды iter++
Аноним 20/05/19 Пнд 16:34:01 140384890
>>1403803
Проще тогда уж написать обычный цикл с итератором
Аноним 20/05/19 Пнд 16:55:11 140386591
>>1403803
>захвати в области захвата
пандорического, не иначе
Аноним 20/05/19 Пнд 17:20:32 140387892
Поясните, если мне нужен контейнер который на 99% совпадает со стандартным, только с заменой одной функции или алгоритма, то как лучше поступить? Скопировать из stl нужный кусок и назвать его my_contaeiner1(new container)?
Аноним 20/05/19 Пнд 17:32:54 140388693
>>1403878
> то как лучше поступить

Использовать стандартный контейнер из STL
Аноним 20/05/19 Пнд 17:46:29 140389294
>>1403878
зачастую оказывается достаточно написать обобщенную свободную функцию, которая принимает итераторы, что поддерживает этот контейнер и все
напишешь что за функционал тебе нужен, может напишу и требуемую функцию
а вообще от контейнеров не наследуются, а агрегируют их
а делать как ты предлагаешь - вообще нехорошо

Аноним 20/05/19 Пнд 18:21:11 140390395
Аноним 20/05/19 Пнд 22:27:10 140400696
>>1403728
мда хех
timer = startExecution("single-thread");
stopExecution("single-thread", timer);
MatrixMult(A, B, C);
Аноним 21/05/19 Втр 00:12:25 140404497
Аноним 21/05/19 Втр 07:38:01 140411098
>>1404044
> джун
> реализовать пул памяти, используя virtualalloc
Ну хуй знает. Удачи им.
Аноним 21/05/19 Втр 08:39:45 140412299
>>1404044
>>1404110
С другого лагеря тоже доставляют
>Для юниоров по Москве средняя в районе 100 тыс.
>В стартапах зп должна быть выше рынка
Аноним 21/05/19 Втр 08:44:59 1404124100
>>1404044
>джун на крестах, 20 тр в москве
может лучше в яндекс еду?
Аноним 21/05/19 Втр 12:24:46 1404178101
Мамочка, спасибо тебе за то, что в сосничестве я учил скриптовые языки программирования.
Аноним 21/05/19 Втр 14:05:20 1404229102
Сап двач,

как можно получить символ юникода в std::wstring зная его код.
Пример:
Надо получить std::wstring res = "血";
Имеется:
std::wstring test = "8840" - юникод японского символа.
создать его из двух строк "\u" + "8840" нельзя, на стэк оверфлоу есть тема: https://stackoverflow.com/questions/47915811/c-adding-u-to-string

Есть ли способы создания символов динамически? Или как я могу еще преобразовать его в эту залупу 血?
Аноним 21/05/19 Втр 14:08:33 1404231103
>>1404229
Уже сменил несколько бутылок
Аноним 21/05/19 Втр 14:22:43 1404236104
я дак бы не успел за 3 дня пул памяти написать, даже если делать в си-стиле, типа как в apr сделано или у сысоева в энжинх, а если еще и делать чтобы под кресты он ложился, типа как в boost::pool, там еще больше работы
Аноним 21/05/19 Втр 16:12:38 1404271105
>>1404122
Зависит от языка и стека, конечно. В js все примерно так и есть.
Аноним 21/05/19 Втр 17:53:37 1404289106
>>1404271
Покажи, где снулю, вчерашнему студенту, плотят 100к?

Может оно у них там и называется "джуниором", но ловить там нехрена без 2+ лет опыта и знания всякой херни, которая по объему в 10 раз превышает собственно сам js. Да и в этом случае нужно очень плотно к собеседованию готовиться.
Аноним 21/05/19 Втр 19:01:10 1404324107
Аноним 21/05/19 Втр 19:31:54 1404340108
>>1404324
Это никак не доказывает, что снулем можно вкатиться и получать 100к.

Знакомый с моей мухосране работает жс-мидлом или около того, получает 80 начинал кстати с 25к. Хотет перекатиться в ДС. Только хотелка съеживается, как до поиска работы дело доходит.
Аноним 22/05/19 Срд 00:33:30 1404467109
>>1404110
Сложно что-ли? Обычную обертку над винапи просят написать. Такое каждый джун должен уметь делать. Для 50к норм работа.
Аноним 22/05/19 Срд 01:11:41 1404470110
>>1404467
за 3 дня сложно пул памяти написать, даже простейший
Аноним 22/05/19 Срд 02:03:54 1404477111
>>1404470
Большой объем кода или там надо разбираться в api и тд?
22/05/19 Срд 06:56:05 1404509112
Обьясните, пожалуйста, как работает этот фактори паттерн?
Есть условный shape, есть circle и triangle.
Создаю я фактори для них c createShape и т.д. В коде создаю вектор shape и пушбэкаю в них через circle\triangle_factory. Вроде бы все работает и красиво, но если в конструкторах circle и triangle разное колво аргументов? Как заставить все работать с createShape с разным колвом аргументов?
Так же если у меня в circle условно дополнительные переменные и сеттер\геттер, как мне к ним получить доступ? После пушбека в массив v[0]. видит только функции с Shape но никак не с circle\triangle. Подскажите плз, всю голову сломал уже. (И да, использование фактори обязательно и принципиально)
Аноним 22/05/19 Срд 07:14:12 1404516113
>>1404509
>вектор shape
А нужны указатели на Шейп. Про остальное перечитываю как работает фабрика.
22/05/19 Срд 08:11:58 1404521114
>>1404516
vector<shape*> v;
v.pushback(circle_factory->createShape());
v[0]. и вот тут видны только функции с shape, как мне обнаружить еще и с класса circle?
Аноним 22/05/19 Срд 08:16:18 1404522115
>>1404521
dynamic_cast<Circle звездочка>(v[0])
Но если ты знаешь, что там будет именно Circle звёздочка, почему бы не хранить именно его?
Аноним 22/05/19 Срд 09:46:20 1404535116
>>1404521
>и вот тут видны только функции с shape
Это как бы подразумевается. Фабрика обычно делает объекты с одинаковым интерфейсом но разными имплементациями.
Аноним 22/05/19 Срд 10:38:32 1404550117
image.png (159Кб, 1920x1050)
1920x1050
image.png (210Кб, 1920x1050)
1920x1050
image.png (212Кб, 1920x1050)
1920x1050
image.png (250Кб, 1920x1050)
1920x1050
Сап. Помогите разобраться с "connect" ситуация такова, что у меня есть одно окно со схемой и входными данными, и нужно чтобы при нажатии кнопки данные с LineEdit передавались во вторую формочку, реализовал считывание данных на первом пикене флеймите сильно изза быдлокода, только начал изучать средства qt не знаю как иначе разместить кучу LineEditов на формочке, кроме как создавать 9 обьектов, вот эти 9 единиц данных нужно вкинуть на вторую формочку, где должно выводится решение, тоесть идёт формула XR1+YR2, и вместо R нужно поставить полученные числа, и дальше проводить с ними манипуляции, моя попытка коннекта, с которой я обосрался, показана на 2-4 пике, буду благодарен любой помощи.
Аноним 22/05/19 Срд 12:24:32 1404580118
>>1404550
- итак, в коннект с использованием SIGNAL/SLOT макросов обычно пишут имя ф-и и типы всех параметров (тут 8 int), а у тебя один int. Обычно я использую версии коннекта с передачей адресов методов, так что честно хз можно ли так. Знаю что можно коннектиться к сигналу, если у сигнала количество параметров больше или равно каличеству параметров слота.
- НАХУЯ ты коннектишься к QHBoxLayout, если надо к объекту твоего Widget-а?
- я заебался считать количество аргументов, то ли их 9, то ли 8. Когда надо передать дохуя параметров не поленись сделать струкруру и емитить ее по ссылке;
- в основном окне, данные из LineEdit-ов используются только в слоте нажатия кнопки? Тогда делай их как локальные переменные, а не как члены класса.
- solutionWindow как-то удаляется после создания? Если нет, то или родителя передавай и ставь флаг, что это окно, или устанавливай аттрибут Qt::WA_DeleteOnClose. А то утечка памяти получается.
- в том виде как на пиках, я вообще не вижу смысла в этом сигнале. Так как solutionWindow создается каждый раз, и данные расчитываются в том же методе. Проще сделать solutionWindow-у публичный метод setData и вызывать его.
- лучше приконектится к сигналу QPushButton-а clicked чем к pressed. Имхо конечно, тут уже ты сам определяешь поведение.
- ну по стилю - старайся придерживаться однообразного названия классов, переменных и тд, а то у тебя то с большой буквы, то с маленькой.
Аноним 22/05/19 Срд 13:17:08 1404612119
>>1404580
Спасибо, что то понял, а что то нет, я слабо понимаю к чему коннектиться, потому что QHBoxLayout из widget недоступен в solutionwindow, поэтому я хз что тут приконнектить, чтобы оно передавало данные, сейчас попытаюсь детальнее разъяснить что должно получиться, во втором окне, мне нужно
расписать вот такое же решение https://electroandi.ru/toe/metod/metod-konturnykh-tokov-reshenie-zadach.html только с использованием чисел из первого окна, я сделал в функции нажатия кнопки весь расчёт, тоесть хочу передать рассчитанные данные и исходные во второе окно, чтобы просто оформить, но оно просто не выполняется, значит в connect я прописал некорректно, получается осталось разобраться что нужно коннектить чтобы данные передавались именно во второе окно.
Аноним 22/05/19 Срд 13:30:59 1404615120
Поясните, почему во многих алгоритмах граф задается как
vector < vector<pair<int,int>>
а не
< vector<pair<int,int>>
Аноним 22/05/19 Срд 13:32:07 1404619121
>>1404615
Из одной вершины несколько друг могут идти?
Аноним 22/05/19 Срд 14:50:27 1404681122
>>1404619
понял. Правда все равно неясно, чем это лучше чем матрица смежности.
22/05/19 Срд 15:26:29 1404707123
>>1404535
Так а что делать, если надо "не обычно" ?
Аноним 22/05/19 Срд 15:33:54 1404711124
>>1404509
на твоем уровне понимания можно просто перегрузить createShape
а вообще это требует виртуального конструктора, прямой поддержки которого в с++ нет и обычно реализуется через паттерн фабричный метод

Аноним 22/05/19 Срд 15:56:13 1404720125
>>1404681
Это и есть матрица смежности, просто ее разреженный вариант (sparse vs dense). Лучше экономией памяти, если у тебя граф большой и имеет мало связей, не нужно нули хранить.
Аноним 22/05/19 Срд 16:38:12 1404733126
>>1404470
Да что там писать-то? Винапи если знаешь нужные и ООП основы, то за 1 вечер написать можно. Хуй знает что ты там аж 3 дня собрался писать.
Аноним 22/05/19 Срд 19:37:21 1404875127
Аноны, выручайте, делаю список студентов по имени и фамилии, не получается сортировка по первой букве имени. Без динамического выделения памяти.
Я точно знаю, что ошибка в инициализации массива указателей на имена, только где эта ошибка хуй его знает. Сразу говорю, что только только вкатился в ООП, поэтому не шарю практически нихуя, начал изучать наследование.
https://pastebin.com/AedmXB9d
Аноним 22/05/19 Срд 20:12:38 1404883128
>>1404875
должно быть как минимум temp[j][0] < temp[min][0], потому что ты сравнивать должен первые символы, а не указатели на строки.
А так вам дали std::string, а вы ебетесь с указателями. Ну ебитесь
Аноним 22/05/19 Срд 20:20:19 1404888129
>>1404883
Я просто недавно выкатился с си, братан
Аноним 22/05/19 Срд 20:25:06 1404889130
>>1404883
По-моему там вообще указатели на объекты, не?
Аноним 22/05/19 Срд 20:29:44 1404891131
>>1404883
Кстате в ифе делал через ★temp[j]<★temp[min] что эквивалентно тому что ты написал, но тож не получалось
Аноним 22/05/19 Срд 20:31:13 1404892132
★temp[j] это temp[0][j], а тебе нужно temp[j][0]
Аноним 22/05/19 Срд 20:36:13 1404896133
>>1404875
Вкатывайся в стандартную библиотеку, сортировка будет в одну строчку.
Аноним 22/05/19 Срд 20:36:22 1404897134
>>1404892
Все равно не работает, брат
Аноним 22/05/19 Срд 20:45:04 1404902135
>>1404892
Пробовал ещё просто в цикле в отдельном методе выводить имена, в итоге выводилось куча букв М и в конце первое имя и так на каждой строчке
Аноним 22/05/19 Срд 20:45:55 1404903136
>>1404902
Выводить массив указателей на имена
Быстро фикс
Аноним 22/05/19 Срд 20:58:10 1404906137
человеку слжно жить в городе
город высасывает энергию
около природы жить идеально
Аноним 22/05/19 Срд 21:00:20 1404907138
>>1404470
Под "пулом" я понимаю fixed-size block allocator. Если пул не растущий и размер фиксирован, то за пару часов можно спокойно реализовать, если понимаешь принцип. Выделяешь память на N страниц, создаёшь где-то фри-лист (или в самих ячейках хранить, как емнип делает dlmalloc). new - снимаешь с листа, free - выдаёшь с листа. Всё, он даже уже почти thread-safe, раскидать атомиков только. Если растущий пул, то надо ещё логику управления выделенными страницами, не очень сложно.

Но вот если случайный размер (general purpose allocator), тогда дело сложное. В принципе можно просто добавить к предыдущей реализации слияние смежных блоков, чуть подкрутить того и сего, но если ты хочешь действительно хороший аллокатор, тебе предстоит веселиться с политикой нахождением блока (best fit, first fit, разделение на бины), фрагментацией и скоростью всего этого дела. Но его и не просят, так что не парься.

Быстрое гугление навело на Доббса, где приводится код growing fixed-size block allocator, где фри-лист хранится в самих ячейках. http://www.drdobbs.com/a-quick-and-simple-memory-allocator/184403440
Аноним 22/05/19 Срд 23:06:42 1404966139
>>1404907
одна из главных фич пулов памяти - это то, что его легко снести когда станет ненужным
такая модель хорошо ложится на некоторые типы задач, когда проэкт на сях написан
но я не понимаю как сделать полезным эту фичу в крестах
видимо, поэтому пулы памяти в крестах и не прижились
но это все мои догадки, тк на практике я их не делал и не применял
вот ты пишешь что сделал бы за 2 часа, а я, хотя и понимаю что надо делать, делал бы месяца 3, не меньше

Аноним 22/05/19 Срд 23:11:27 1404968140
по сути, выгоду по скорости пул памяти дает не при выделении памяти, а при освобождении
плюс экономится размер памяти за счет того что внутренние обслуживающие структуры памяти меньше размера занимают (не надо размер блока помнить, он фиксированный)
Аноним 22/05/19 Срд 23:37:31 1404985141
>>1404966
>такая модель хорошо ложится на некоторые типы задач, когда проэкт на сях написан
>но я не понимаю как сделать полезным эту фичу в крестах
Какая разница, на чём написан проект? Пулы и аллокаторы используются всегда для одних и тех же целей: уменьшить число аллокаций, когда у тебя много мелких объектов одного типа постоянно приходит и уходит. Неважно, Си, Плюсы. Пулы объектов даже на джаве были (хотя с новыми JVM особо и не нужны они).

>вот ты пишешь что сделал бы за 2 часа, а я, хотя и понимаю что надо делать, делал бы месяца 3, не меньше
Ты три месяца будешь делать 1 (один) связный список?
Аноним 23/05/19 Чтв 00:18:53 1405007142
>>1404875
Напиши оператор < и не ебя голову сравнивай ОБЪЕКТЫ
Аноним 23/05/19 Чтв 01:17:26 1405024143
Доброй ночи, аноны. У меня есть два вопроса к разработчикам на крестах:
1) Как обстоят дела с вакансиями в вашем городе (не беру в расчет ДС/ДС2) для новчиков без опыта работы. Например, в моем городе (Ростов-на-Дону) таких вообще нет. Все в основном от мидла и выше. Так вот вопрос - как начинают свой путь программисты на C++? Неужели переходят с других языков? Хотя мне казалось, что его многие учат первым. Я, например, в универе его учил первым по программе.
2) Для программирования в никсах вообще стоит рассматривать C++ сейчас? Или же до сих пор все модули - это чистый C, в большинстве своем?
Аноним 23/05/19 Чтв 01:20:42 1405026144
>>1405024
И вдогонку вопрос: какие целевые области применения для разработки на крестах вы видите на данный момент?
Аноним 23/05/19 Чтв 01:25:47 1405028145
>>1405024
наверное они начинали когда кресты были популярны, нэ
Аноним 23/05/19 Чтв 01:43:41 1405034146
>>1405028
Значит ли это, что сейчас в кресты вкатываться не имеет смысла даже уже имея какое-то минимальное представление о программировании на них
Аноним 23/05/19 Чтв 03:01:59 1405046147
>>1405024
>Так вот вопрос - как начинают свой путь программисты на C++
Несколько лет сосал хуйцы на госзаводе. И даже там я не был джуном. Со всеми проблемами ебался сам, на качество моего кода всем было похуй. Но я дохуя читал хороших книжек. А кто не читал до сих пор на этом заводе.
>Для программирования в никсах вообще стоит рассматривать C++ сейчас?
Ты про никсы или про ядро никсов? Потому что это две большие разницы

>>1405034
Это примерно как пойти в макдак сейчас или поучиться и пойти в макдак стать специалистом. Кресты это высокий порог вхождения, со всеми достоинствами и недостатками. Работа будет.
Аноним 23/05/19 Чтв 09:39:51 1405099148
>>1405034
Не вижу особого смысла. Очень несовременный язык, который применяется либо в легаси десктопе, который писали ещё тогда, когда кресты не проиграли эту нишу шарпу, либо в рокет саенс, где надо нереально въебывать и очень хорошо разбираться в математике или архитектуре пк. В первом случае зп нищенские, во втором на уровне джавистов, ненапряжно пишущих круд.
Аноним 23/05/19 Чтв 10:01:25 1405108149
>>1405099
>джавистов, ненапряжно
Бабка на двое сказала.
Мне, например, общество математиков куда как более приятно.
Аноним 23/05/19 Чтв 10:32:27 1405113150
>>1405024
вкатываться в С++ смысла ровно 0, иди во фронтэнд.
Аноним 23/05/19 Чтв 12:15:55 1405135151
>>1405108
Просто не всем приятно заниматься тяжёлым интеллектуальным трудом, а получать на уровне крудошлепа. Кресты это призвание.
Аноним 23/05/19 Чтв 12:29:35 1405136152
2019-05-23-12:2[...].png (220Кб, 1227x1006)
1227x1006
Начал постягать ваш язык. Чет пиздец у вас тут магия.
Аноним 23/05/19 Чтв 14:54:12 1405166153
Всем спасибо за ответы

>>1405046
>Ты про никсы или про ядро никсов?
Да, я про ядро. Знаю, что в окружении, вроде как, и так часто qt и c++ используют

>>1405113
>вкатываться в С++ смысла ровно 0, иди во фронтэнд
Мне уж ближе бэк тогда, я думаю. Правда вот PHP не особо близок. Но он вроде как и бэке и во фронте обязателен к изучению. Ну и еще сейчас есть вариант быстро перекатиться в iOS разработку, но вот как-то немного смущает узкая специализация свифта под продукты Apple (хотя и мак и айфон у меня для изучения есть).
Аноним 23/05/19 Чтв 15:31:54 1405185154
Пацаны, решил делать сортировку по номерам зачеток, в интовый массив все кладу по итогу, но сортировка по ебанутому работает, точнее практически не работает, но вроде все правильно сделал
https://pastebin.com/fVmkDcKj
Аноним 23/05/19 Чтв 15:32:23 1405186155
Аноним 23/05/19 Чтв 16:11:49 1405225156

если на проэкте используется стандартная библиотека, то, по сути, функционал пула памяти перекрывает обычный вектор с предварительно выполненным reserve
Аноним 23/05/19 Чтв 17:23:12 1405282157
>>1405185
У тебя A это объект типа Student i-ый, а не значение поля numb этого объекта.
Тебе надо обращаться через оператор точку к полям или стрелку, если через указатель.
Аноним 23/05/19 Чтв 19:02:49 1405301158
Аноним 23/05/19 Чтв 20:43:55 1405365159
>>1405136
Ну да, а в чем проблема? Хочешь всю строку - пиши cin.getline
Аноним 23/05/19 Чтв 22:54:30 1405436160
>>1405136
операторы >> и << лучше не трогать для начала. Когда про перегрузку операторов узнаешь, там понятно станет. Алсо, пока перегружать эмодзи нельзя, терпеть можно
Аноним 24/05/19 Птн 01:38:12 1405482161
>>1405365
>Ну да, а в чем проблема? Хочешь всю строку - пиши cin.getline
О том и говорил. Какого-то такого поведения и ожидал от этого оператора.
>>1405436
>операторы >> и << лучше не трогать для начала
Ясненько, спасибо. Страуструп просто именно с них начал пояснять как работать с инпутами, аутпутами.
Аноним 24/05/19 Птн 08:24:56 1405548162
>>1404681
>>1404619
>>1404615
Теперь я не понял, мне объясните. Что означает вектор векторов пар?
Аноним 24/05/19 Птн 15:14:20 1405728163
.png (15Кб, 943x641)
943x641
>>1405548
Это значит что в каждом элементе вектора содержится вектор в котором содержится пара.
Аноним 24/05/19 Птн 15:21:15 1405731164
>>1405728
Надо было нарисовать их разной длины для большей наглядности, это ж не массивы.
Аноним 24/05/19 Птн 15:28:03 1405740165
>>1405731
Я в курсе. Это же просто пример.
Аноним 24/05/19 Птн 21:21:28 1405912166
Screenshot1.png (4Кб, 767x50)
767x50
Правильно ли я сделал + в виндовс формах, или это небезопасное преобразование и говнокод?
Аноним 24/05/19 Птн 21:51:51 1405932167
>>1405046
>Несколько лет сосал хуйцы на госзаводе
Анонче, нахожусь в такой ситуации - сосу хуйцы на госзаводе. По городу вакансий на плюсах нет, кроме как на мой завод. Дай советов мудрых как выкатится с этой безнадеги.
инб4 читать хорошие книжки.
Аноним 24/05/19 Птн 21:58:20 1405935168
Поясните, что хочет этот код? В каком формате ему кормить stdin?

while (scanf ("%d%d", &n, &m) == 2) {
for (int i = 1; i <= n; i++) {
int a;
assert (scanf ("%d", &a) == 1);
...
}
Аноним 24/05/19 Птн 23:03:45 1405967169
>>1405932
заведи дачу, на ней огород, выращивай овощи, будешь экономить на них
Аноним 25/05/19 Суб 08:28:41 1406098170
>>1405935
Причем тут кресты, это сишечка.
Первому сканфу кормишь два целых через пробел, второму просто целые.
Делает непонятно что.
Аноним 25/05/19 Суб 10:03:48 1406126171
image.png (94Кб, 247x250)
247x250
Аноним 25/05/19 Суб 13:24:19 1406219172
>>1406098
Первому нужно одно двузначное.
Аноним 25/05/19 Суб 13:49:10 1406233173
Аноним 25/05/19 Суб 14:33:14 1406260174
О Makefile'е вопрос.

Зачем в зависимостях таргета ставят "Makefile"? То есть,
>build/main.o: main.c Makefile
>    $(CC) ....

Что тут делает "Makefile"? Всё работает и без него. Заггулить невозможно, все ответы просто о таргетах в makefile'ах, а не необорот.
Аноним 25/05/19 Суб 15:06:49 1406269175
Аноним 25/05/19 Суб 15:23:59 1406272176
>>1405136
Перегрузку >> и << для I/O делали наркоманы, когда С++ был еще хипстерским андерграундом. Сейчас комитет такую хуйню никогда бы не пропустил. Сделали бы через функции get/set (in/out).
Аноним 25/05/19 Суб 16:05:24 1406289177
>>1406272
>через функции get/set
Куча скобок и точек? Нахуй нахуй.
Аноним 25/05/19 Суб 16:24:27 1406292178
Есть годная литература по шаблонному метапрограммированию? Та, что в шапке, ещё не устарела?
Аноним 25/05/19 Суб 17:54:55 1406334179
>>1406292
соответствующая глава во втором издании "шаблонов" вандервуда, если ты только начал разбираться
из классики - александреску
шалбонное метапрограммирование на крестах постоянно эволюционирует и видоизменяется, проще всего отслеживать это просматривая соответствующие доклады с конференций
https://www.youtube.com/watch?v=IF51Gsu3Cec
плюс смотришь как развиваются соответствующие библиотеки в boost:
https://www.boost.org/doc/libs/?view=category_metaprogramming

но дзен заключается в том, что шаблонное метапрограммирование ты изучаешь не более чем как для собственного развлечения, типа такое хобби, на практике ты его врят ли будешь применять
те нужно принять то что ты просто так развлекаешься и смириться
Аноним 25/05/19 Суб 17:56:49 1406335180
>>1406334
cutting edge в метапрограммировании на крестах щас типа считается boost::hana

Аноним 25/05/19 Суб 17:58:49 1406336181
>>1406335
и типа она универсальная - обеспечивает метавычисления как на значениях так и на типах
freeglut Аноним 25/05/19 Суб 23:11:38 1406471182
Аноны, кто-нибудь вкурсе, почему ReshapeFunc реагирует не только на изменение размеров окна, но и на КЛИКИ?
Аноним 25/05/19 Суб 23:20:27 1406473183
>>1406471
> freeglut
Не надо использовать это говно мамонта.
Юзай: glfw, sdl2
Аноним 25/05/19 Суб 23:22:49 1406475184
Аноним 25/05/19 Суб 23:24:04 1406476185
>>1406473
Разве glfw это не glut + прочие доп. библиотеки?
Аноним 26/05/19 Вск 00:48:53 1406507186
>>1406476
glut\freeglut\flfw\sdl2 и тд и тп это библиотеки для создания контекста. То есть окошка и обработка сообщений от ОС: клавиатура\мышка\джойстик и тд.
Там, конечно, не только этот функционал. Разработчики добавляют что-то своё.
Glut\freeglut не рекомендуется использовать. Они устарели и давно не обновлялись.
Аноним 26/05/19 Вск 00:55:38 1406508187
>>1406507
Почему эти библиотеки во всех примерах сочетают (glad+glfw3, glad+sdl2, glut+glew и т.п.)?
Аноним 26/05/19 Вск 01:02:37 1406510188
>>1406508
glad и glew это библиотеки которые подгружают расширения для Opengl
Чтобы тебе каждую функцию писать вручную не пришлось.
Почитай основы: https://github.com/glcoder/gl33lessons
Аноним 26/05/19 Вск 06:41:20 1406549189
>>1406334
>, на практике ты его врят ли будешь применять
>те нужно принять то что ты просто так развлекаешься и смириться
Не проецируй=)
Аноним 26/05/19 Вск 10:13:12 1406576190
Как за неделю освоить кресты, чтобы сделать лабы в вузике и ргз? Препод сам программистом работает, и поймёт если я ничего не знаю.
Аноним 26/05/19 Вск 10:23:23 1406582191
Аноны, объясните за статическую память, что это за заверь? Есть стек, есть куча, а это че за хуйня?
[code]
for(;;) {
static int c=0;
c++;
}
[/code]
Где этот статик вообще бля??
Аноним 26/05/19 Вск 10:51:37 1406588192
Аноны, подскажите как изменить структуру проекта чтобы стало по человечески, а не laba1.cpp. Есть проект, в нем сущестует 3 класса - два из них являются составляющими шахматы пишу, клетка и фигура, а один - общий доска шахматная. Но в первых двух классах нужно вызывать методы родителя при перемещении фигуры нужно проверить что на клетке нет других фигур например, и пару слотов коннектить. Сейчас храню в каждом классе указатель на общий, но понял что это какое-то хуёвое проектирование, раз приходиться так делать. Подскажите как можно переделать, чтобы составные классы не смогли навредить общему, если что-то пойдет не так
Аноним 26/05/19 Вск 11:56:25 1406616193
1fl5yi6bbpzz.png (153Кб, 640x549)
640x549
>>1406576
Пикрелейтед
>>1406582
Выделяется при старте программы, освобождается при выходе
>>1406588
Класс фигур с енумом в качестве типа фигуры чтобы можно было повышать пешки. Хранят также был ли первый ход, опять же для пешек.
Двумерный массив с указателями на фигуры в качестве доски.
Класс контроллер определяющий возможные ходы, хранящий была ли рокировка и ТП
Наверное ещё класс ход для визуализации, записи партий и отката ходов.
Аноним 26/05/19 Вск 12:58:29 1406643194
>>1406582
По идее это стек, но static используется, чтобы локальные переменные имели время жизни такое же, как глобальные переменные.
Аноним 26/05/19 Вск 13:04:59 1406648195
>>1406616
ору
в ньюс недавно обложку этой книги постили
Аноним 26/05/19 Вск 13:11:05 1406650196
>>1406588
Я правильно тебя понял, ты фигуру отнаследовал от шахматной доски?
Аноним 26/05/19 Вск 13:28:02 1406657197
>>1406576
писать в структурном си стиле: только функции и базовые управляющие конструкции - циклы и ветвления
как то так
Аноним 26/05/19 Вск 13:34:47 1406661198
>>1406549
если ты способен применить техники шаблонного метапрограммирования на продакшене, четко осознавая что есть в этом необходимость, то за твой скилл и твое место работы можно только порадоваться-позавидовать
Аноним 26/05/19 Вск 14:41:04 1406719199
>>1406650
Нет, фигура отдельный абстрактный класс. А доска обьединяет в себе фигуры и клетки. Но изнутри фигуры мне нужно обьединить сигнал Qt-шный с слотом доски, и вызывать некоторые функции при построении вектора для хода/атаки фигуры. Вот недавно какой-то баг обнаружил, что фигура при инициализации делает какую-то хуйню с доской которую я передаю по указателю, в результате чего указатель не равен nullptr, но при этом данные его не валидны, и при попытке вызвать какой-то метод программа крашится с SEGFAULT. Потому и спрашиваю, как можно огранизовать иерархию классов, чтобы фигуры и клетки не могли навредить доске, но при этом имели доступ к ее методам. Книжку про паттерны я не читал
Аноним 26/05/19 Вск 14:52:29 1406723200
>>1406719
Я пока сам только осиливаю ООП, но попробовал бы так: есть класс клетки, который может быть черный/белый, пуст/занят, такой-то фигурой, если занят. А ещё лучше - внутри указатель на объект класса "фигура", в котором записана своя логика ходов и всего остального, если он nullptr - то клетка свободна.
А доска - это класс, наследующий от контейнера, содержащего объекты класса "клетки", т.е. вектор векторов клеток и доопределенные методы, чтобы объекты класса "игрок" дёргали свои фигуры.

Но я только учусь быдлокодер, потому эта схема вряд ли хороша.
Аноним 26/05/19 Вск 14:59:29 1406726201
>>1406723
> потому эта схема вряд ли хороша.
Да нормальна. Ни к чему все эти усложнения. Доска обычный массив структур. Структура (как ты и описал) имеет цвет, какой-нибудь внутренний индекс для расчёта ходов, указатель на фигуру.
Аноним 26/05/19 Вск 15:08:13 1406729202
>>1406719
Иерархия классов против SEGFAULT не поможет. Ты просто хуйню какую-то делал. Ограничивай количество действий которые можно сделать через публичный интерфейс. К примеру если тебе нужно чекать может ли какая-то фигура перейти на какую-то клетку, то ты вызываешь метод доски который это чекает. А не вытаскиваешь (через указатель на доску) кучу инфы (например о других фигурах) в метод фигуры и там ковыряешся потенциально что-то ломая. Можешь ограничивать доступные методы. Например, если твоей фигуре от доски нужены только методы "проверить возможность хода" и "переместить меня", то ты можешь создать абстрактный класс BoardDelegate (например) с двумя этими методами, доску отнаследовать от нее, а указатель на доску в классе фигуры объявить не как указатель на доску, а как указатель на BoardDelegate. И тогда твоя фигура сможет вызывать только этих два метода доски.
Аноним 26/05/19 Вск 15:11:46 1406731203
Сап, анон. Возникла задача визуализировать дискретно отходящую графику условно с датчика на крестах. Проект без qt, только буст. Сейчас вывод был в .bmp в папку, но нужно все же в динамике, да и сохранять на диск пиздец как не хочется. Визуализация не для конечного потребления, больше как для изучения.
Какой путь лучше выбрать?
Использовать Vulkan (opengl, directx)?
Или же как-то сохранять в numpy массивы, а затем загружать в питон?
Или лучше сразу написать враппер моих классов для того же питона, и там уже сделать визуализацию?
Аноним 26/05/19 Вск 15:14:47 1406732204
Аноним 26/05/19 Вск 15:17:05 1406733205
>>1406729
Да баг с сегфолтом я уже нашел и пофиксил, просто после него задумался об проектировании, чтобы таких ошибок изначально не возникало. Про делегат спасибо, сейчас что-то такое попробую сделать
Аноним 26/05/19 Вск 15:25:06 1406736206
>>1406657
Увы, но вся суть лаб и ргз классы.
Аноним 26/05/19 Вск 15:30:34 1406739207
Аноним 26/05/19 Вск 15:35:09 1406746208
>>1406729
> создать абстрактный класс BoardDelegate (например) с двумя этими методами, доску отнаследовать от нее
Где про подобное можно почитать по подробнее?
Аноним 26/05/19 Вск 16:09:29 1406793209
Есть лаба по компьютерной графике. Надо вывести пиксель в консоли. Но putpixel не работает. Что делать?
Аноним 26/05/19 Вск 16:17:00 1406805210
>>1406793
надо перевести терминал в какой-то там видеорежим, но это типа древняя хуйня, короче, можешь курить borland C через DOSBox,а можешь левую графическую либу юзать, но это не точно, сосите хуй, честь имею
Аноним 26/05/19 Вск 17:01:05 1406849211
>>1406732
А все же питон использовать есть резон? Данные потом хотел математически покрутить
Аноним 26/05/19 Вск 17:17:43 1406856212
Как вкатиться в функциональщину с констэкспрами, темплейтами и прочими фишками? Нихуя не понимаю. Хочу был компилтайм богом. Есть гайды какие на русике?
Аноним 26/05/19 Вск 17:30:03 1406873213
>>1406856
На хаскеле попиши, темплейты то же самое, только вид в профиль.
Аноним 26/05/19 Вск 17:32:58 1406878214
Аноним 26/05/19 Вск 17:34:12 1406880215
>>1406334
Эмм, списки типов это же примитивная хуйня, которую в любом вузике объясняют, не?
Аноним 26/05/19 Вск 17:37:28 1406886216
>>1406856
дзен заключается в том что раньше (до новых стандартов) в метапрограммировании на шаблонах приходилось использовать техники функционального программирования, а конкретно:
метавычисления на типах вообще не могли изменять состояния своих сущьностей, которыми оперировали, тебе приходилось не изменять состояние, а производить новые состояния; метавычисления на значениях были оче ограничены и ты тоже мало мог че поделать, тоже приходилось не изменять, а порождать новые значения
вместо итерации приходилось использовать рекурсию
вместо условного оператора приходилось использовать по сути вариант патерн-матчинга в виде комбинации частичных специализаций и sfinae
в новых стандартах многие метавычисления (как на типах так и на значениях) уже можно делать императивным способом, так гораздо наглядней и понятней получается

это то что касается компайл-тайм
реал-тайм лень расписывать
Аноним 26/05/19 Вск 17:39:06 1406888217
>>1406880
ебанись, ни в одном вузе такой обскур тебе не будут рассказывать, студентосы просто вообще не врубят че это такое, нах
Аноним 26/05/19 Вск 17:42:45 1406891218
>>1406873
Я слышал что это язык для олдов с опытом программирования от 5 лет и ньюфаги его не осилят... Мне базовые понимания нужны, чтобы в ногу со временем идти так сказать.

>>1406886
Вот это ты загрузил меня. Накидайте лучше материала какого, а я уже сам ковырять буду.
Аноним 26/05/19 Вск 17:59:17 1406898219
>>1406878
Скажи это ебучей студии, у которой уже ГОД баг с временем жизни объектов
Аноним 26/05/19 Вск 18:05:43 1406906220
>>1406643
Хуйню какую-то написал. Есть сегмент данных, размер которого фиксирован, есть сегмент кучи, который идет за ним в адресном пространстве, и есть сегмент стека, который растет с верхних адресов вниз.
Аноним 26/05/19 Вск 18:06:36 1406907221
>>1406582
static там же, где глобальные переменные. Просто функция выполняет роль namespace
Аноним 26/05/19 Вск 18:23:22 1406921222
>>1406891
берешь boost.hana, разбираешься, смотришь зачем, смотришь как внутри сделано
понимаешь что это нахуй не нужно, а только поиграться
все
Аноним 26/05/19 Вск 18:24:45 1406922223
>>1406849
Можешь ещё в gnuplot перегонять данные
Аноним 26/05/19 Вск 18:31:22 1406927224
>>1406906
Ну сорян, таких подробностей не знаю, я читал про постоянную память(она была может быть условно в книге стеком обозначена) и динамически выделяемую(кучу). И он тоже спросил - стек или куча?
>>1406898
Что за баг, и на каких версиях присутствует?
Аноним 26/05/19 Вск 18:39:32 1406937225
Аноним 26/05/19 Вск 18:53:18 1406948226
>>1406906
Ответ от домохозяек для домохозяек. Ты хоть про какой формат исполняемых файлов, ос и рантайм говоришь?
Аноним 26/05/19 Вск 19:04:24 1406953227
>>1406937
Ну вон летом починят xd.
А ведь c++11 в студию запилили по-моему в '13 версии ведь.
Аноним 26/05/19 Вск 22:21:06 1407058228
>>1406898
>баг в студии
Причём тут иде вообще к языку? Я вообще иде не пользуюсь, build.sh в сосноли запускаю и всё.
Аноним 26/05/19 Вск 22:21:25 1407060229
>>1406731
окошко из opencv2, где-то на хабре его даже в дебаггер встраивали
Аноним 26/05/19 Вск 22:21:56 1407061230
Аноним 26/05/19 Вск 22:25:55 1407065231
>>1407058
Молодец. Когда закончишь делать лабы, приходи.
Аноним 26/05/19 Вск 22:40:02 1407071232
>>1406334
STL тоже подпадает под понятие мета-программирования?
Аноним 26/05/19 Вск 23:21:09 1407089233
>>1407065
Причём тут лабы, лол, я про рабочий проект. Ты может охуеешь, но для конпеляции не нужно вообще ничего, кроме конпелятора.
Аноним 26/05/19 Вск 23:28:02 1407093234
>>1407065
Вообще чего тебе такого даёт иде? Для редактирования есть тот же vs code, для отладки gdb. И смысл в иде?
Аноним 26/05/19 Вск 23:31:41 1407094235
>>1407065
К тому же там инклюды какие-то вонючие подключаются ( stdafx.h) и есть отличия от стандарта и баги как выше писали. Одни минусы и ноль полезности при злоебучей тяжеловесности. Такое говно. А ты говноед.
Аноним 26/05/19 Вск 23:34:52 1407096236
Аноним 26/05/19 Вск 23:59:08 1407106237
>>1407089
Насколько большой у тебя проект? Хотя бы LOC метрику приведи.
>>1407093
> Вообще чего тебе такого даёт иде?
Конкретно студия - почти ничего. Но вместе с решарпером становится гораздо удобнее и быстрее кодировать.
> для отладки gdb.
Не удобно дебажить без контекста.
>>1407094
> К тому же там инклюды какие-то вонючие подключаются ( stdafx.h)
Без комментариев. Почитай про precompiled headers.
>>1407096
> По сути пользуясь их иде ты пишешь на некотором диалекте плюсов
Ну кто же виноват, что ты решил наговнокодить?
¯\_( ° ʖ °)_/¯
Может ещё gnu extensions вспомнить?
Аноним 27/05/19 Пнд 00:00:11 1407107238
>>1407094
> stdafx.h
Это предкомпилированный заголовок, ты можешь туда всякие инклюды добавлять часто используемые, чтобы сохранить время.
И это кстати отключается одной галочкой, если не нужно.
Аноним 27/05/19 Пнд 00:35:25 1407118239
>>1407071
нет конечно
stl в первую очередь поддерживает парадигму обобщенного программирования
Аноним 27/05/19 Пнд 00:39:02 1407120240
>>1407106
>Насколько большой у тебя проект? Хотя бы LOC метрику приведи.
Огромная либа, сравнимая с STL по размеру.
>решарпер
Всё есть в вскоде том же.
>прекомпилед хедерс, можно отключить
Да какая разница, зачем вообще иде что-то добавляет отсебятину какую-то, если можно без этого?
>наговнокодить
Одно дело экстеншн, который добавляет новое, но со стандартом не расходится, другое это именно расхождение. Ну да пох, это уже не иде, а компилер, а в студию любой компилер можно вставить по идее.
В общем возвращаясь к началу, баг в студии никаким раком не относится к static, есть стандарт, который описывает как должно быть, а есть всякое мелкомягкое васянство, которое к делу не относится.
Аноним 27/05/19 Пнд 00:41:19 1407123241
>>1407120
> не относится к static
Ну не относится к описанному в стандарте static. Мало ли чё они там заговнокодили у себя, их дело, всё равно нормальные люди их говно не юзают.
Аноним 27/05/19 Пнд 00:43:36 1407124242
>>1407107
>ты можешь туда всякие инклюды добавлять часто используемые, чтобы сохранить время.
Бля, а сам я создать такой хедер с инклюдами типа не могу, религия не позволит или че? Нахуя мне это говно пихать, меня вот лично это бесит.
Аноним 27/05/19 Пнд 01:12:49 1407131243
>>1407124
> Огромная либа, сравнимая с STL по размеру.
То есть у тебя хватает знаний, чтобы писать библиотеки, но ты не знаешь, что такое pch? Наркоман?
> vscode
Что есть? Зачем мне ещё один браузер на компьютере?
> Да какая разница, зачем вообще иде что-то добавляет отсебятину какую-то, если можно без этого?
Студия добавляет pch потому что ты забыл снять галочку при создании проекта.
> Одно дело экстеншн, который добавляет новое, но со стандартом не расходится, другое это именно расхождение.
Сколько раз из-за этого расхождения у тебя что-то не получалась / ломалось? Как думаешь, увеличится ли это число ближайшие десять лет?
> В общем возвращаясь к началу, баг в студии никаким раком не относится к static, есть стандарт, который описывает как должно быть
Кончено не относится. На то он и баг, а не "расхождение со стандартом".
Аноним 27/05/19 Пнд 01:39:55 1407135244
>>1407131
>ты не знаешь, что такое pch
Где я такое говорил?
>Зачем мне ещё один браузер на компьютере?
Не понял, удобный текстовый редактор же.
> забыл снять галочку
Это они забыли её не делать поставленной по умолчанию, а не я забыл снять. В том же гцц всё намного лучше сделано, если тебе нужно прекомпилед хедер создаёшь хедер с инклюдами например и компилишь в .gch и никакого бугурта, а тут за тебя решили как тебе удобнее, меня такое отношение бесит, например.
>Сколько раз из-за этого расхождения у тебя что-то не получалась
Нисколько, я не юзаю микрософтовский компилер потому что.
>На то он и баг,
Не относится он потому что чувак спрашивал про С++, а С++ <=> стандарт, чем является ключевое слово статик в имплементации мелкомягких и где там у них баги дело десятое, понимаешь? А ты так написал(или не ты, тот анон в общем), будто плюсы равносильно визуал студии, на мой ответ с доходчивой табличкой со скоупами/временем жизни/линковкой ответ был мол скажи это студии, чего блядь, причём тут ИДЕ вообще? Я считаю, что у меня полыхнуло совершенно обоснованно.
Аноним 27/05/19 Пнд 01:43:34 1407136245
Ладно, пожар утих.
А чем компилируешь ты, анон?
Аноним 27/05/19 Пнд 01:53:45 1407140246
>>1407136
Визуал студио пользуюсь и компилю там же. Не понимаю дебилов, которые сидят на clang'e на какой-нибудь пингвибунте и дрочат вим.
Аноним 27/05/19 Пнд 02:00:32 1407142247
>>1407136
Дома gcc, на работе один проприетарный компилятор.
Аноним 27/05/19 Пнд 02:03:34 1407143248
>>1407140
Ты бесплатную версию качал, community или как там она называется?
Аноним 27/05/19 Пнд 02:04:00 1407144249
>>1407142
Ты не устаёшь от кодинга на работе?
Аноним 27/05/19 Пнд 02:08:51 1407146250
>>1407144
Устаю, дома не часто что-то пилю, но бывает нахлынет вдохновение допилить недопиленное, ну ты понел.
Аноним 27/05/19 Пнд 03:47:23 1407151251
>>1401309 (OP)
Помогите все разумные способы написания "Вuжуал Сtyдия" придумать, не могу автоскрытие настроить, то и дело какой-то ребенок со своим WinAPI прорывается, и из треда сразу выйти хочется еще на 20 реинкарнаций.
Аноним 27/05/19 Пнд 07:56:51 1407171252
>>1407136
ВСтудия, КютКреатор с мингв и гцц, дома ничего не делаю.
Аноним 27/05/19 Пнд 08:57:42 1407180253
>>1406907
а я понял, что бы эту переменную не зашкварили снаружи, на хуй так надо делать? Что-то вроде замыкания?
Аноним 27/05/19 Пнд 09:11:37 1407185254
>>1407180
Это чтобы функция сохраняла значения каких то параметров от предыдущего вызова этой функции. Это еще в сишке сделали, например чтобы функция генерации псевдослучайных чисел использовала предыдущее значение для генерации следующего, и хранилось бы оно только в одном месте.
Аноним 27/05/19 Пнд 11:17:28 1407237255
>>1407180
статик переменная даёт статическое время жизни, она создаётся в начале программы и живёт до самого конца программы
Аноним 27/05/19 Пнд 11:19:35 1407239256
>>1407237
те везде, где тебе нужно такое поведение с долгоживущей переменной, юзаешь статик
Аноним 27/05/19 Пнд 12:03:16 1407260257
>>1407185
брат, вот за такое я очень благодарен, охуенно, теперь понял зачем это нужно, брат, где ты такое прочитал? А то в большинстве учебников написано "что", а не "зачем".
Аноним 27/05/19 Пнд 12:05:47 1407262258
>>1407237
"статическое время жизнь" - это блядь откуда такое? Я не выебываюсь, просто уточнить хочу.
Аноним 27/05/19 Пнд 12:54:51 1407287259
Аноним 27/05/19 Пнд 13:59:52 1407318260
>>1407237
>создаётся в начале программы
там вроде гарантируется только то, что будет создана до первого использования. Точный момент создания не регламентирован.
Аноним 27/05/19 Пнд 17:30:43 1407436261
Аноним 27/05/19 Пнд 18:23:22 1407485262
>>1407318
ну да, имеел ввиду, что с момента создания до конца программы, да, хуёво выразился
Аноним 27/05/19 Пнд 23:43:40 1407672263
Как правильно дебажить релизную версию программы?
Аноним 27/05/19 Пнд 23:45:16 1407674264
>>1407672
Хорошим логированием
Аноним 27/05/19 Пнд 23:46:08 1407675265
>>1407151
Так ты сразу выйди, и больше не заходи, в чем проблема то?
Аноним 27/05/19 Пнд 23:50:18 1407677266
>>1407136
MSVC 2019 и на работе, и дома.
Аноним 27/05/19 Пнд 23:56:44 1407680267
>>1407136
Компилирую MSVC под винду и gcc под юникс. Честно говоря, не вижу особой разницы, ибо весь проект симейком управляется. После генерации на любой ОС остается нажать одну кнопку для полного билда.
Аноним 28/05/19 Втр 01:15:52 1407700268
>>1407672
Смотря как оптимизатор отработал. У тебя там дамп или что? Если нет, то качай гидру
Аноним 28/05/19 Втр 01:32:25 1407702269
>>1407700
Свое приложение, а не чужое. Ты меня не правильно понял. Допустим, в дебаге весь жизненный цикл программы прокликал, все работает, а релиз версия крашится, где-то неопределенное поведение. Как дебажить?
Аноним 28/05/19 Втр 03:51:28 1407746270
У себя на компе програ нормально компилится и работает.
Отправил прогу другу. Нормально компилится, но работает неправильно. Там вместо нормального числа образовался nan.

Дело в компиляторе? У меня линукс и дефолтный code bloks. У друга мак. Есть какие-то флаги, которые надо поставить перед компиляцией, чтобы прога нормально работала на любом железе?

Сам использую просто
// g++ -std=c++11 name.cpp
Аноним 28/05/19 Втр 05:45:48 1407752271
Аноним 28/05/19 Втр 06:56:16 1407757272
>>1407672
А ты не очень умный
Аноним 28/05/19 Втр 11:26:36 1407834273
>>1407702
Читать-прогонять полученный асм. Лично я такой баг однажды так и не нашёл после целого дня поиска. Отключил оптимизацию во всём файле, где была ошибка, и забил.
Аноним 28/05/19 Втр 12:06:32 1407854274
>>1407702
мб где-то структура не обнуляется, или гонка если есть тхреды.
Аноним 28/05/19 Втр 13:39:23 1407891275
изображение.png (145Кб, 1920x1080)
1920x1080
изображение.png (156Кб, 1920x1050)
1920x1050
изображение.png (94Кб, 1920x1050)
1920x1050
Начал изучение шаблонов, захотел реализовать шаблонный класс, который позволит обрабатывать одномерный массив любого типа, где я обосрался, и как правильно сделать?
Аноним 28/05/19 Втр 13:51:32 1407905276
>>1407891
ахахах
кинь на пастбин) ну ты и говнарь
Аноним 28/05/19 Втр 13:57:41 1407913277
>>1407905
соричи, забыл про эту хуйню, файлы комментом там разделяются?
Аноним 28/05/19 Втр 13:59:09 1407916278
Аноним 28/05/19 Втр 14:19:26 1407934279
>>1407891
Шаблоны нельзя писать раздельно в хедере и файле реализации. Вся реализация должна быть в хедере.
Аноним 28/05/19 Втр 14:20:23 1407935280
>>1407934
ну препод грит можна, спасибо.
Аноним 28/05/19 Втр 14:44:13 1407947281
Аноним 28/05/19 Втр 14:52:01 1407951282
В рот ебал ваш язык поганый. Животные.
Аноним 28/05/19 Втр 14:52:25 1407952283
Аноним 28/05/19 Втр 16:10:19 1408027284
.PNG (25Кб, 546x155)
546x155
Аноним 28/05/19 Втр 17:25:05 1408081285
>>1407934
в стандарте 98 были прописаны 2 способа - модель включения и экспорт шаблонов
но оказалось что экспорт шаблонов крайне сложно реализовать в компиляторе (пара реализаций все же была) и при этом их полезность оказывается сомнительной
об этом подробно писал саттер в "новых сложных задачах на c++"

Аноним 28/05/19 Втр 17:28:42 1408083286
>>1407854
Тыкать пальцем в небо такое себе занятие. Мне нужен проверенный вариант.

>>1407674
>>1407834
Спасибо, анонам. Включил генерацию асм листинга и мапы.
Еще нагуглил прикрутить туда WinDbg, все супер.
Аноним 28/05/19 Втр 18:24:52 1408102287
>>1408083
>Тыкать пальцем в небо
ни один дебаггер тебе не скажет, что ты забыл обнулить структуру перед использованием. Попробуй мозгами пошевелить чтоле
Аноним 28/05/19 Втр 18:31:51 1408105288
Аноны, есть прога с использованием функции qsort, которой там быть не должно. Можете подсказать как от нее избавиться?
Выглядит так:
qsort(&points[1], n - 1, sizeof(Point), compare);
28/05/19 Втр 18:52:45 1408114289
>>1408105
Берёшь и сортируешь массив от &points[1] до &points[n-1] с помощью функции compare сам.
Аноним 28/05/19 Втр 18:53:24 1408115290
>>1407672
Попробуй скормить статическому анализатору.
Аноним 28/05/19 Втр 19:08:22 1408131291
>>1408105
Если я правильно понял значения её аргументов то:
using std;
sort(++begin(points), --end(points), compare);
Аноним 28/05/19 Втр 19:42:39 1408156292
Аноним 28/05/19 Втр 19:46:08 1408163293
>>1408156
двухзондовый нейтронный каротаж
Аноним 28/05/19 Втр 19:47:16 1408164294
Аноним 28/05/19 Втр 21:34:59 1408264295
>>1408114
А как это будет выглядеть?
Я прост хуевый погромизд, помогаю просто.
Аноним 28/05/19 Втр 21:36:44 1408266296
>>1408264
Нормально будет выглядеть.
Аноним 28/05/19 Втр 21:43:16 1408273297
Аноним 28/05/19 Втр 22:11:34 1408290298
Аноним 28/05/19 Втр 22:23:34 1408293299
Драйверописатели тут? Поясните почему WDK не поддерживает STL? Там же по факту нужно просто реализовать несколько ключевых функций и все должно заебись работать. Типо в new malloc заменить на ExAllocatePool, и в delete free заменить на ExFreePool. Ну может ещё в нескольких функциях поменять методы создания потоков/объектов синхронизации. Почему мне при написании драйвера приходится жрать говно и не иметь ни динамического массива, ни строк, вообще нихуя и это в 2019, сука, году.
Аноним 28/05/19 Втр 22:25:00 1408297300
>>1407060
Короче я не послушал всех и сериализовал в бинарник, и выцепил в великолепном питоне через numpy. Потом может прикручу враппер, больно уж годная связка выходит
Аноним 28/05/19 Втр 22:27:33 1408300301
>>1407136
Визуальная студия, и qt с ней же. На шинде заметно шустрее мингв. Проект ща мсвцшный, но запараллелен с cmake, хоть в нем мне сложна.
Аноним 28/05/19 Втр 22:30:29 1408304302
Что не так с развитием цпп? Хочу использовать везде шаблоны, но прога собирается вместе с бустом просто пиздец долго, и это на i7 на всех ядрах.
Аноним 28/05/19 Втр 22:30:58 1408305303
>>1408300
То есть у вас cmake И vcxproj? Нахуя второе?
Аноним 28/05/19 Втр 22:31:38 1408309304
Аноним 28/05/19 Втр 22:33:33 1408310305
>>1408290
Не ебу как это реализовать в "моей" программе
Аноним 28/05/19 Втр 22:34:29 1408311306
Аноны, а msvc с современным языком и всякими stl даёт какую-нибудь векторизацию и распараллеливание само? Я не хочу сам писать треды и обосанные мьютексы, а для асинка я пока слаб. Почему, если компилятор видит, что для каждого элемента вектора надо сделать +1, нельзя это как-то в параллель?
Аноним 28/05/19 Втр 22:36:51 1408314307
>>1408305
vs хреново с ним дружит, не было в начале 17й студии неких вещей типа профайлера. Не знаю, как сейчас.
>>1408309
Спасибо, включу, с института на автомате выключал
Аноним 28/05/19 Втр 23:00:23 1408322308
>>1408311
>с современным языком и всякими stl
>а для асинка я пока слаб
ну вот ты сам и ответил
Аноним 28/05/19 Втр 23:04:09 1408324309
>>1408293
потому что шаблоны в ядре юзать совсем не комильфо
28/05/19 Втр 23:17:10 1408329310
>>1408311
>распараллеливание
В 17х появилось ExecutionPolicy для многих алгоритмов, правда я нигде не видел, чтобы их кто-то использовал.
>векторизацию
Любой компилятор может только самую примитивную векторизацию сделать. Как говорится, _mm256_pishi_sam_pd();
>Я не хочу сам писать треды и обосанные мьютексы
Пиши CAS циклы и wait-free алгоритмы.
Аноним 28/05/19 Втр 23:20:36 1408330311
>>1408293
Потому, что STL инклудит очень много всякой хуйни. Теоретически - ты можешь "вычленить" нужные тебе контейнеры, практически - очень тяжело.

Мы написали свою строку, вектор, лист, хэш таблицу и всякие мутексы\локгварды.
Зато трайп-трейты в кернел просто копипастятся без проблема.

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


Аноним 28/05/19 Втр 23:28:15 1408331312
Ну ананасы, помогите с исключением функции sort из кода, лабу надо сдавать, а я не ебу как ето сделать.
http://cpp.sh/6skm7
93 строка
Аноним 28/05/19 Втр 23:36:02 1408332313
>>1408330
>Кто тебе такую хуйню сказал?
Хуйня - это когда говнокодеры тащат в ядро плюсы с stlями, эксепшенами и прочей ебалой, а адекватные будут писать на C.
Аноним 28/05/19 Втр 23:48:21 1408338314
>>1408332
ясно, мы вам перезвоним
Аноним 28/05/19 Втр 23:53:01 1408340315
>>1408338
много драйверов написал?
Аноним 29/05/19 Срд 00:09:24 1408348316
>>1408340
>драйверов
это все нинужна
Аноним 29/05/19 Срд 00:14:28 1408351317
>>1408348
клован? цирк уехал?
Аноним 29/05/19 Срд 00:24:22 1408353318
>>1408351
нужно писать сайты на Vue/React и голосовать за Путина
Аноним 29/05/19 Срд 00:27:40 1408355319
>>1408353
когда в руках молоток - всё вокруг кажется гвоздями
Аноним 29/05/19 Срд 00:31:35 1408356320
>>1408355
в голову тебе гвоздей вбить либирашка русофобная
Аноним 29/05/19 Срд 00:35:19 1408358321
Аноним 29/05/19 Срд 00:36:53 1408359322
>>1408358
знал что тебе понравится, няша, а теперь прогнись :3
Аноним 29/05/19 Срд 00:38:20 1408360323
>>1408359
пиздуй обратно в цирк
Аноним 29/05/19 Срд 00:40:14 1408363324
>>1408360
мы уже здесь, сладкий, клоунируем с тобой на пару :3
Аноним 29/05/19 Срд 00:41:23 1408365325
Бля, пацаны, я вот выучил плюсы, писал тут недавно по этому поводу, ну и я не придумал короче, что дальше делать, ну и короче что вы думаете? Взял да и давай маерса читать. Бля! Я охуел! Я ж нихуя не знаю! Я ж говнокодер бля! Оказывается, на плюсах писать и собака может, а вот уметь писать ексепшн-сейф код с адекватной инкапсуляцией и к тому же производительный это голову иметь нужно! Пиздец!
Аноним 29/05/19 Срд 00:43:17 1408366326
Аноним 29/05/19 Срд 00:45:11 1408369327
>>1408365
>Я ж говнокодер бля!
Таким и помрешь.
>>1408366
Нахуй иди.
Аноним 29/05/19 Срд 00:50:40 1408376328
>>1408363
не суди по себе, дружок. Мне клованов на работе хватает, которые свято верят в то, что 6-ая студия генерит самый быстрый код, а все что позже 8-й нахуй не надо. А тут еще ты со своими шаблонами в дровах.
Аноним 29/05/19 Срд 00:52:40 1408379329
>>1408376
>студия
Оно еще и дебил с виндой.
Клоун as is, хаха.
Аноним 29/05/19 Срд 00:53:54 1408381330
>>1408365
>выучил плюсы
Перестал читать. Выучить поюсы невозможно.
Аноним 29/05/19 Срд 00:54:53 1408384331
>>1408365
Все хорошо, бро. Все крутые люди когда-то крутыми не были, погружайся в сабжекты, строй таски и улучшайся, не все же время uznay_ebal_li_ya_telku_s_takim_imenem.c компилить.
Аноним 29/05/19 Срд 00:54:58 1408386332
>>1408379
Я же просил потолще, хули ты такой слабак
Аноним 29/05/19 Срд 00:57:10 1408390333
>>1408386
>эта ОБИДА умственно и не только неполноценного виндузятника
As expected.
Аноним 29/05/19 Срд 00:57:51 1408393334
>>1408365
ты даже не пытаешься
Аноним 29/05/19 Срд 01:00:59 1408397335
>>1408393
>эта промахивающаяся мимо постов ущербная омежка
А ручонки-то дрожат, хаха.
Аноним 29/05/19 Срд 01:01:41 1408398336
>>1408365
лучше кнута почитай или нейронку напиши
Аноним 29/05/19 Срд 01:02:48 1408401337
>>1408397
ты же еще не знаешь, что ты собакен, да?
Аноним 29/05/19 Срд 01:05:53 1408403338
>>1408401
>эти невнятные визги
Все, шизик вразнос пошел.
Помянем.
Аноним 29/05/19 Срд 01:07:04 1408405339
>>1408403
О, да. Скажи, когда на тебя лает собака на улице, ты становишься на четвереньки и лаешь ей в ответ?
Аноним 29/05/19 Срд 01:08:15 1408406340
>>1408405
>эти нелепые омежные оправдания
>эти риторические вопросы
Верный признак лоха по жизни, кстати.
Аноним 29/05/19 Срд 01:10:04 1408409341
>>1408406
Гавкай, гавкай, собакен, хочешь косточку?
Аноним 29/05/19 Срд 01:11:32 1408410342
изображение.png (1083Кб, 1280x720)
1280x720
>>1408409
>эти риторические вопросы №2
>это нищее чмо на плюсах под виндой
Все сходится.
Аноним 29/05/19 Срд 01:13:27 1408412343
bonePNG47.png (21Кб, 1600x1600)
1600x1600
>>1408410
Голодный пёсик, держи. Хочешь мы тебе родословную напишем?
Аноним 29/05/19 Срд 01:14:34 1408413344
Аноним 29/05/19 Срд 01:15:52 1408414345
загружено.png (74Кб, 1200x630)
1200x630
Аноним 29/05/19 Срд 01:17:34 1408415346
изображение.png (28Кб, 812x412)
812x412
Аноним 29/05/19 Срд 05:23:52 1408465347
Аноним 29/05/19 Срд 08:32:03 1408502348
>>1408332
Но ведь как раз таки на си больше шансов допустить ошибку. Деструкторов нет и ты сам должен освобождать всю выделенную память -> большой шанс забыть про это и получить утечку.
Аноним 29/05/19 Срд 09:30:03 1408527349
>>1408502
Ты отвечаешь человеку который на вопрос про шаблоны пишет про эксепшоны. Следовательно он или тролль, или дебил, а ты дебил, что его коментишь.
Аноним 29/05/19 Срд 09:52:48 1408542350
Объясните почему вот такая хуйня работает:
int some_number = 5;
auto func = [&]() ->int
{
return some_number +=2;
};
some_number = func();
А при передаче этой лямбды в другую функцию требуется обертка в виде std::function, т.е. вот это не работает:
using func_ptr = int(звездочка)();
void test(func_ptr func)
{
func();
}

test(func); //ошибка компиляции
Что такого магического делает std::function, что заставляет это работать?
Аноним 29/05/19 Срд 11:10:28 1408575351
>>1408542
Внезапно, оборачивает лямбду.
Либо принимай std function, либо делай функтор шаблонным параметром
Аноним 29/05/19 Срд 11:10:53 1408576352
>>1408542
Лямбда это не функция, а функциональный АБ ЪЕКТ, логично, что твой указатель на функцию это вообще другой тип.
Аноним 29/05/19 Срд 11:37:09 1408584353
>>1408542
#include <iostream>

auto func = [](int& a)
{
return a +=2;
};
using func_ptr = int(*)(int&);

void test(func_ptr f, int& a)
{
f(a);
}

int main()
{
int a = 0;
test(func, a);
std::cout << a << std::endl;
}

Алсо если ты не капчуришь переменные извне, то у лямбды есть конверсия к функшн поинтеру, так что вот так сработает, например.
Аноним 29/05/19 Срд 11:38:29 1408585354
>>1408542
>a ->int
Явное указание выходного типа теперь избыточно.
>using func_ptr = int(звездочка)();
>void test(func_ptr func)
>{
>func();
>}
И вообще типы лучше нигде явно не указываться если это точно не требуется:
auto test = [](auto func) { func(); };

И кстати лямбда - это выражение языка, описывающее замыкание, а не само замыкание.
Аноним 29/05/19 Срд 11:41:13 1408587355
>>1408502
есть много способов выстрелить в ногу. Можно и в деструкторе что-то забыть
Аноним 29/05/19 Срд 11:43:48 1408588356
>>1408527
а логическая цепочка шаблоны->плюсы->эксепшены разве не очевидна?
Аноним 29/05/19 Срд 12:14:58 1408599357
>>1408576
А какой типо тогда у этого объекта? Как мне кастануть к нему, сделать указатель на такой объект? При наведении курсора на него, показывает что-типо lambda []... , но к такому типу нельзя привести.
Аноним 29/05/19 Срд 12:16:51 1408600358
>>1408584
А почему то что я захватываю туда что-то вообще имеет значение? Оно туда при компиляции идёт как дополнительный аргумент или что?
Аноним 29/05/19 Срд 12:20:31 1408603359
>>1408588
Нет, ты вполне можешь использовать шаблоны без эксепшенов, что за дикие ассоциации?
Аноним 29/05/19 Срд 12:22:22 1408606360
>>1408585
Ну аргументы лямбды Я указываю т.к. если это объект то при попытке доступа к методам или полям этого объекта студия не показывает список со всеми этими свойствами и приходится их вручную самому писать, а не 2-3 первых буквы и дальше стрелочками.
Аноним 29/05/19 Срд 12:50:52 1408628361
>>1408599
>А какой типо тогда у этого объекта?
У каждого компилятора свое внутреннее представление о типе лямбды если интересно узнать какой именно тип, то читай Маейрса "Эффективный и современный С++", поэтому при присвоении лямбды переменной нужно писать auto или std::function (но в этом случае будет просто неявный каст, поэтому так делать нужно, если очень надо). А для твоего случая лучшим вариантом будет сделать через шаблон:
template<typename Functor>
void test(Functor func)
{
func();
}
И компилятор сам разберется, что ему подставлять.
Аноним 29/05/19 Срд 13:06:11 1408643362
>>1408588
Ну и что не так с экспепшенами? В ядре тоже обработка исключений. Даже несмотря на то, что их можно просто не использовать, разве нельзя приделать их поддержку?
Аноним 29/05/19 Срд 13:33:48 1408660363
>>1408348
Один, в продакшене сейчас, мне ок.
Аноним 29/05/19 Срд 13:35:06 1408662364
>>1408643
SEH - это слегка другое, и он не сочается с С++, т.к. не может разматывать стэк, если присутствуют обьекты с деструкторами
Аноним 29/05/19 Срд 13:35:56 1408663365
Аноним 29/05/19 Срд 13:42:24 1408665366
>>1408603
Да можно. И эксепшены можно, и все вместе можно,оборачивая в многоуровневые try catch'и. Вопрос в том, как сделать проще и понятнее, с минимумом кода.
Аноним 29/05/19 Срд 14:00:44 1408679367
>>1408662
вроде в компиляторах крестов при реализации собственных исключений испльзуют seh (или его аналоги в юниксах), но не уверен, где то слышал или читал


Аноним 29/05/19 Срд 14:04:01 1408682368
>>1408679
нет, исключения из стандарта и SEH - это абсолютно разные вещи. SEH не рекомендуется использовать микрософтом вообще нигде, кроме драйверов, т.к. в драйверах SEH ловит кое-какие проблемы, которые вообще никак не поймать по-другому.
Аноним 29/05/19 Срд 14:15:59 1408687369
>>1408682
я в книжке рихтера читал что исключения с++ в компиляторе майкрософт используют seh
это было под винду и относительно давно
поэтому и спросил, вдруг кто лучше знает
Аноним 29/05/19 Срд 14:26:30 1408694370
image.png (2Кб, 451x23)
451x23
>>1408682
Если вот эту хуйню на пикриле включить то и SEH исключения тоже ловятся в обычном try catch ведь, значит там где-то всеравно реализуются обработчики сеха.
Аноним 29/05/19 Срд 19:32:30 1408834371
>>1408599
>А какой типо тогда у этого объекта?
У каждой лямбды свой уникальный unnamed тип. Имени у него нет, поэтому никак ты его не напишешь, указатель не сделаешь и не кастанёшь.
>>1408600
Потому что так гласит Стандарт.
Аноним 29/05/19 Срд 19:42:34 1408836372
>>1404229
ну тип
wchar_t bite = {0x8840};
std::wstring buffer = L"";
buffer += bite;
Аноним 29/05/19 Срд 19:46:37 1408838373
>>1408834
>так гласит Стандарт
>The closure type for a non-generic lambda-expression with no lambda-capture whose constraints (if any)
are satisfied has a conversion function to pointer to function with C++ language linkage (10.5) having the
same parameter and return types as the closure type’s function call operator.
C++17 International Standard 8.4.5.1:7
Аноним 29/05/19 Срд 21:11:59 1408861374
>>1408834
>Имени у него нет, поэтому никак ты его не напишешь,
На сам деле можно, просто не нужно:
auto MyLambda = []{};
using MyLambdaType = decltype (MyLambda);
Аноним 29/05/19 Срд 21:30:31 1408869375
Аноним 29/05/19 Срд 21:54:34 1408877376
Аноним 29/05/19 Срд 22:26:54 1408894377
>>1408877
Сравниваешь по одному индексу, меняешь другой
Аноним 29/05/19 Срд 22:38:12 1408899378
>>1408861
Лол, а я чёт деклтайп сразу отмёл и не стал проверять.
Аноним 29/05/19 Срд 22:42:54 1408900379
>>1408894
Подробнее, пожалуйста
Аноним 29/05/19 Срд 22:47:09 1408905380
Безымянный.png (16Кб, 869x319)
869x319
>>1408900
Сделал
while (i <= j) {
while (Comparator(a, v) == true)
++i;

while (Comparator(a, v) == false)
--i;

if (i >= j)
break;

swap(a[i++], a[j--]);
}
Теперь
Аноним 29/05/19 Срд 22:47:34 1408906381
>>1408899
Вернее как, написал decltype(func(0)), вернуло инт и я такой, ну да, деклтайп не поможет. Пхах, бывает.
Аноним 30/05/19 Чтв 10:33:56 1409060382
image.png (32Кб, 741x477)
741x477
image.png (10Кб, 691x190)
691x190
Как инициализировать си-строку в структуре?
Литералом норм получается, а переменной никак.

https://onlinegdb.com/HJe_DI-apN
Аноним 30/05/19 Чтв 10:40:34 1409064383
>>1409060
memcpy?
не жрать говно и использовать wstring?
Аноним 30/05/19 Чтв 10:48:12 1409067384
>>1409064
>не жрать говно и использовать wstring?
Не могу, у меня WinApi головного мозга, там иначе никак

>memcpy?
Это значит, что через фигурные скобочки никак не получится? Только руками в каждый член присваивать?
Аноним 30/05/19 Чтв 11:05:18 1409072385
>>1409067
>Это значит, что через фигурные скобочки никак не получится? Только руками в каждый член присваивать?
Пишешь конструктор и не ебешь мозг. И лучше использовать std::copy вместо memcpy.
Аноним 30/05/19 Чтв 11:08:11 1409073386
>>1409060
Обычные массивы не присваиваются друг-другу. Используй конструктор присваивания, в котором вызывай спец. функцию для копирования.
Аноним 30/05/19 Чтв 11:11:01 1409074387
>>1409072
Я не могу запилить конструктор для структуры, определенной в винапи
Аноним 30/05/19 Чтв 12:36:48 1409104388
>>1409060
Тупо сделай конструирующую функцию, например
wchar_t t1[] {L"213123"};
wchar_t t2[] {L"2126783"};
auto makeSample = [](bool fl, gsl::span<wchar_t> s)
{
Sample sam;
sam.flag = fl;
using namespace std;
copy(begin(s), end(s), begin(sam.caption));
return sam;
};
auto s1 = makeSample(true, t1);
auto s2 = makeSample(false, t2);
Аноним 30/05/19 Чтв 12:55:50 1409119389
>>1409074
функцию напиши. В WinAPI жи есть CString, который под юникодом спокойно преобразуется в std::wstring в обе стороны
Аноним 30/05/19 Чтв 16:47:41 1409276390
1500438082191.gif (4093Кб, 400x200)
400x200
Аноним 30/05/19 Чтв 20:11:29 1409432391
Допустим, есть какая то линия из пикселей, не обязательно прямолинейная. Как построить линии из каждого пикселя этой линии, перпендикулярные основной линии? Кажется это называется нормаль или как то так? Есть какие то готовые методы или формулы?
Аноним 30/05/19 Чтв 20:13:11 1409434392
>>1409432
Какой класс?
Ты няшная?
Аноним 30/05/19 Чтв 20:15:33 1409436393
Аноним 30/05/19 Чтв 20:28:00 1409441394
>>1409432
Причем тут С++? А так нормаль к кривой в данной точке это перпендикуляр к касательной в данной точке. А касательную уже легко найти, найдя производную. Но матанализ был 9 лет назад, поэтому могу наврать.
Аноним 30/05/19 Чтв 20:30:20 1409443395
>>1409441
> А касательную уже легко найти, найдя производную.
Это я знаю. Но это работает, только если известна формула графика функции. А у рандомной нарисованной кривой формулы нет.
Аноним 30/05/19 Чтв 20:41:03 1409449396
>>1409443
>Но это работает, только если ты не дебил.
А ты дебил и школьник
Так ты няшный? :3
Аноним 30/05/19 Чтв 20:43:02 1409451397
>>1409449
По делу есть что сказать?
Аноним 30/05/19 Чтв 20:49:29 1409453398
>>1409451
>По делу
Деньги вперед.
Аноним 30/05/19 Чтв 20:50:05 1409454399
>>1409453
Это бесплатный тред вообще то.
Аноним 30/05/19 Чтв 20:51:40 1409455400
Почему люди не пытаются сэмулировать(wine)/переписать win32 для линукса и запускать приложения, изначально которые для винды написаны?
Аноним 30/05/19 Чтв 20:57:06 1409461401
>>1409454
>Это бесплатный тред
Для школьников (тебя) - платный.
Аноним 30/05/19 Чтв 20:58:34 1409463402
>>1409432
У тебя есть три точки. Точка через которую нужно провести нормаль и две соседних. Проводишь одну касательную черех центральную точку и соседнюю, и вторую касательную через центральную точку и второю соседнюю. Находишь среднюю между ними - от нее строишь перпендикуляр. По формулам - у тебя есть формула прямой проходящей через заданую точку. Все будет упираться в нахождение коэффициентов (наклона прямой) k. Находишь коэффициент первой касательной (по двум точкам - вычитаешь соотвествующие координаты друг из друга и делишь), находишь коэффициент второй касательной. Потом тебе нужно продумать как именно высчитать средний коэффициент. Потом делаешь над ним очевидные преобразования (чтобы получить перпендикуляр) и всьо.
Аноним 30/05/19 Чтв 21:00:50 1409465403
>>1409455
Я чето не понял твоего поста. Так вайн - это и есть попытка сделать Win32 подсистему для гану-луникса
Аноним 30/05/19 Чтв 21:02:25 1409468404
>>1409443
>у рандомной нарисованной кривой формулы нет
Дык у нее и производная не во всех точках может существовать => в какой-то точке может не быть нормали / быть больше одной нормали.
С другой стороны, в кампухтере все равно это скорее всего будет ебошится численными методами.
Аноним 30/05/19 Чтв 21:04:59 1409470405
>>1409465
Но это эмулятор и не на уровне ядра.
Аноним 30/05/19 Чтв 21:08:23 1409472406
>>1408687
Все правильно. В винде есть 2 типа обработчиков SEH и VEH. Почти везде используется SEH.
Аноним 30/05/19 Чтв 21:11:15 1409473407
>>1409468
А вот этот вроде не совсем дебил.
Очень странно.
Аноним 30/05/19 Чтв 21:19:25 1409477408
1494450722518.png (11Кб, 581x519)
581x519
1457900140312.png (8Кб, 581x519)
581x519
>>1409463
Мне вообще изначально похожий метод пришел в голову, но я покумекал насчет него, порисовал в тетрадке, и там хуйня получится скорее всего. Постарался нарисовать. В масштабе пикселей эти нормали будут хаотичными. А должно быть у них у всех направление, как на второй пикче белыми линиями.
Аноним 30/05/19 Чтв 21:20:52 1409478409
>>1409477
Такая няша :3
Класс 8-9 максимум, очаровательный дурачок ребенок.
Аноним 30/05/19 Чтв 21:21:18 1409479410
>>1409478
Заткнись) От твоих постов все равно нет толку.
Аноним 30/05/19 Чтв 21:24:05 1409480411
>>1409479
>Заткнись)
Чмок тя :3
>нет толку.
Решение только после оплаты :3
Аноним 30/05/19 Чтв 21:25:24 1409481412
>>1409480
Оплату заберешь в кассе.
Аноним 30/05/19 Чтв 21:26:14 1409482413
>>1409481
Решение смотри в личке.
Аноним 30/05/19 Чтв 22:06:39 1409512414
>>1409477
Ну тогда тебе как-то сглаживать нужно. Можешь попробывать строить не по соседним точкам, а например через две. Или высчитывать несколько нормалей - одну по соседним точкам, вторую по удаленным и брать среднее. Если тебе именно плавность нужна, то тут наверное в сторону какой-то скользящей средней или чего-то подобного думать надо.
Аноним 30/05/19 Чтв 22:48:00 1409532415
>>1409512
Я уже склоняюсь к тому, что нахрен эти нормали. Все равно для моей основной задачи это плохо подходит. Надо какое-то другое решение.
Но за ответ спасибо.
Аноним 30/05/19 Чтв 23:02:14 1409540416
>>1409532
>Надо какое-то другое решение.
Например мозги
Аноним 30/05/19 Чтв 23:06:00 1409544417
>>1409540
Чувак, хули ты тут желчью плюешься?
Аноним 30/05/19 Чтв 23:08:52 1409548418
Аноним 30/05/19 Чтв 23:09:57 1409550419
>>1409548
Шитпостишь только.
Аноним 30/05/19 Чтв 23:12:56 1409554420
>>1409550
>2ch.mail.ru/зк
>Шитпостишь
Что еще делать в загоне для дебилов (тебя), хаха.
Аноним 30/05/19 Чтв 23:18:08 1409562421
>>1409554
Каждому свое. Дебилам - шитпост, а кто хочет, может и нормально общаться.
Аноним 30/05/19 Чтв 23:22:56 1409565422
>>1409562
>два дебила тупят над школьной задачкой коллективно
>так нихуя и не решили
>нормально общаться.
О да.
Аноним 30/05/19 Чтв 23:43:13 1409579423
>>1409565
>школьной задачкой
3-4 курс университета так—то
Аноним 30/05/19 Чтв 23:54:43 1409582424
>>1409579
>построить нормаль к линии на плоскости
>3-4 курс университета
Не знал что есть университеты для счастливых обладателей 47 хромосом (тебя)
Аноним 31/05/19 Птн 00:47:19 1409603425
Аноним 31/05/19 Птн 01:48:25 1409628426
>>1409582
Опять погавкать вылез, собакен? Кости кончились?
Аноним 31/05/19 Птн 01:51:20 1409629427
Аноним 31/05/19 Птн 01:53:19 1409631428
>>1409629
я уже понял, что тебе понравилось, косточка как раз для тебя, дружок
Аноним 31/05/19 Птн 02:04:07 1409632429
>>1409631
>эти оправдания de huesosa
Лол.
Аноним 31/05/19 Птн 02:15:09 1409634430
>>1409632
косточка для хуесоса, что не так?
Аноним 31/05/19 Птн 06:59:21 1409676431
Сап. Класс имеет геттер, возвращает очевидно конст реф.
Почему auto g = foo.getter() выдаёт мне значение? Авто же вроде как парсит эту хуйню. Конструктор копирования удален.
Аноним 31/05/19 Птн 07:45:38 1409681432
>>1409676
> Авто же вроде как парсит эту хуйню
Авто выводит тип, а квалификаторы вроде так называются типа (указатель, ссылка, константа) не выводятся.
Аноним 31/05/19 Птн 07:46:57 1409682433
>>1409676
>Почему
by design
если хочешь ссылку, то объявляй как ссылку: auto &g = foo.getter()
Аноним 31/05/19 Птн 07:50:10 1409686434
>>1409676
У рефференса есть незначительное отличие от указателя в том что указатель это (семантически) отдельная сущность (которую, к примеру, можно скопировать), тогда как рефференс (семантически) считается синонимом объекта. На низком уровне это естественно тоже отдельная сущность но на высоком (в тексте программы) когда ты каким-либо образом используешь рефференс считается что ты работаешь именно с самим объектом (на который указывает рефференс). Поэтому, к примеру, нельзя создать именно копию рефференса (естественно не занимаясь какой-то хуйней с reinterpret кастами или чем-то подобным). При
Foo& aaa = foo;
Foo& bbb = aaa;
у тебя во второй строчке не создается копия рефференса аaa, а объявляется новый рефференс bbb на объект foo потому что семантически вторая строчка равноценна Foo& bbb = foo; - потому что aaa это синоним foo а не настоящая самостоятельная сущность. Поэтому и foo.getter() парситься так как будто вместо него указан именно объект (на который указывает рефференс). Почему const пропадает я не могу объяснить, там есть какая-то дрисня с выводом типов (и параметров шаблонов) что иногда отбрасывается самый внешний const, но я так и не смог понять какого хуя. Каким отбразом конструируется новый объект с удаленным коструктором копирования тоже итересный вопрос. У тебя там могут быть неявные касты - полбъявляй остальные конструкторы как implicit. Или может дебагом посмотри каким именно конструктором строится объект и оттуда разбирайся.


Аноним 31/05/19 Птн 08:05:06 1409695435
Посоветуйте как мне сделать правильнее\лучше.
Делаю игру. У игрока есть способности (реализованы просто калбеками). Например, создать какую-то сущность на карте или удалить её с карты.
Также имеются режимы игры (для каждого свой набор способностей).
Внутри каждого режима есть свои состояния: подготовка, игровой процесс, конец и тд.

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

Может через какой-то паттерн или какую-то йоба приём можно это сделать?
Типа, состояние переключается и посылает эвент, а обработчик на него реагирует в Вов сделано подобное, правда там не для игровой логики это сделано, а для интерфейса?
Аноним 31/05/19 Птн 09:03:30 1409714436
Аноним 31/05/19 Птн 09:07:27 1409716437
>>1409714
> Делаешь машину состояний, задаешь действия при переходе от состояния к состоянию.
Так и сделал.
Там что-то вроде: actionManager.UseAction( "createMap" ); и тп.
Но посчитал что вместо прямого вызова можно сделать по другому.
Аноним 31/05/19 Птн 09:31:21 1409726438
Для плюсов есть какой-то пакетный менеджер?
Аноним 31/05/19 Птн 09:40:45 1409728439
>>1409716
Это что-то не то, у тебя явно вызываются действия вместо запроса смены состояния.
Аноним 31/05/19 Птн 10:08:57 1409744440
>>1409728
Всё так у меня.
Сначала меняется состояние, а затем происходят действия (если нужно).
А я хочу чтобы вместо прямого вызова какой-то функции было что-то вроде посылки событий, но кроме обсервера какого-нибудь я ничего не придумал (и кроме того что есть сейчас).
Аноним 31/05/19 Птн 10:09:49 1409746441
Аноним 31/05/19 Птн 10:11:28 1409748442
>>1409746
Спасибо. А какой лучше юзать новичку? Чтоб поменьше ебаться и большой репозиторий.
Аноним 31/05/19 Птн 10:22:59 1409755443
С программированием знаком, но с ++ не очень. Захотел написать что-то с OpenGL, но нигде не написано как это делать from scratch. Ну или from scratch считают использование CMake/скачать готовый проект.

Дайте ссылку на ресурс (сайт/книгу/статью), где можно почитать нахуя этот CMake нужон и как писать на плюсах имея только g++, vim и клавиатуру?
Только не надо затирать о boilerplate. Я хочу понять как работают плюсы.
Желательно чтоб не было заточено под Linux, на работе, к сожалению, винда.
Аноним 31/05/19 Птн 10:25:04 1409756444
Аноним 31/05/19 Птн 10:28:34 1409758445
>>1409756
Там просто уроки OpenGL. Мне не это нужно.
>нахуя этот CMake нужон и как писать на плюсах имея только g++, vim и клавиатуру?
Аноним 31/05/19 Птн 10:29:26 1409760446
>>1409744
Ну так используй Qt с его сигналами-слотами, ну или Boost.Signal, если впадлу заморачиваться с Qt с его moc.
Аноним 31/05/19 Птн 10:30:48 1409761447
Аноним 31/05/19 Птн 10:31:22 1409762448
Аноним 31/05/19 Птн 10:34:54 1409765449
>>1409762
Потому что нахуй иди вот почему.
Аноним 31/05/19 Птн 10:39:16 1409768450
>>1409758
Создаёшь пустой проект, включаешь нужные заголовки opengl, компонуешь с библиотеками opengl и всё.
Аноним 31/05/19 Птн 10:41:56 1409773451
>>1409768
Если бы всё было так просто и без ошибок, я бы не писал сюда. Я же сказал, ++ слабо знаю.
Аноним 31/05/19 Птн 10:52:27 1409779452
>>1409760
Забей. Ты вообще о другом.
Аноним 31/05/19 Птн 11:59:20 1409812453
>>1409773
> двач, как настроить проект на opengl
>> вот тебе инструкция
> нет, хочу сам всё сделать
>> ну тогда сделай то-то и то-то
> иди нахуй быдло у меня ошибки вылазят
Аноним 31/05/19 Птн 12:01:03 1409816454
>>1409748
Они оба довольно простые, но лучше Конан изучить, он пока что единственный кроссплатформенный.
Аноним 31/05/19 Птн 12:07:04 1409822455
>>1409812
Ты долбаеб? Я не просил настроить мне проект на OpenGL, глаза ванишем помой.
Аноним 31/05/19 Птн 12:28:27 1409830456
>>1409822
>КУДАХ БАБАХ КУКАРЕКУ
Разрывом малолетнего долбоеба удовлетворен.
Аноним 31/05/19 Птн 12:38:44 1409836457
>>1409822
Перечитай свои высеры ещё раз, плиз
Аноним 31/05/19 Птн 12:58:12 1409844458
>>1409755
>нахуя этот CMake нужон
Когда у тебя проект состоит из более чем одного файла laba.cpp, то удобнее использовать утилиты автоматизации сборки. Одной из популярных является make, который жрет Makefile и собирает проект, но из-за того, что язык мейкфайла пиздец какой кривой, то начали создавать генераторы этих мейкфайлов. CMake один из таких генераторов, еще есть qmake например (от Qt).
https://ru.wikipedia.org/wiki/Автоматизация_сборки
>как писать на плюсах имея только g++, vim и клавиатур
Ручками ебана. Пишешь свою ебу, например, в yoba.cpp. Далее в консоли: g++ yoba.cpp -o yoba (флаги компиляции сам посмотришь, какие нужны). Если проект из нескольких файлов, например yoba1.cpp и yoba2.cpp, то каждый
файл сначала компилишь в объектный файл, а потом собираешь вместе:
g++ yoba1.cpp -c yoba1.o
g++ yoba2.cpp -c yoba2.o
g++ yoba1.o yoba2.o -o yoba
Согласись, что писать это заебывает, а если нужно еще и библиотеку какую-нибудь, то легче застрелиться. Для облегчения всей этой ебли и нужен CMake.
Аноним 31/05/19 Птн 13:00:56 1409845459
>>1409744
Нихрена не понял. Запрос смены состояния это и есть посылка сообщения.
Аноним 31/05/19 Птн 13:11:23 1409850460
>>1409830
>>1409836
Хуёвый ты тролль, если для тебя оскорбление - признак разрыва. Скорее всего, просто малолетний.

>>1409844
Спасибо. Вот я как раз о второй части хочу почитать. Что если мне нужно подключать хучу библиотек, и у меня хуча файлов? В каком порядке это всё компилировать? Хочу весь процесс компиляции понять.
Я пролистал Страуструпа The C++ Programming Language по диагонали, но там, как я понял, компиляция не рассматривается?
Аноним 31/05/19 Птн 13:27:36 1409854461
>>1409844
когда в петух-ОС не завезли Вижуал студию
Аноним 31/05/19 Птн 13:40:56 1409858462
>>1409755
Cmake ебаная параша. Учите meson.
Аноним 31/05/19 Птн 13:53:22 1409867463
Аноним 31/05/19 Птн 14:00:03 1409868464
image.png (16996Кб, 3835x2558)
3835x2558
Аноним 31/05/19 Птн 14:41:07 1409901465
>>1409854
Я думал компоновщики в любой более-менее известной IDE есть?
Аноним 31/05/19 Птн 14:49:14 1409903466
Аноним 31/05/19 Птн 14:50:21 1409904467
Аноним 31/05/19 Птн 21:20:41 1410078468
>>1401309 (OP)
Допустим есть у нас
template<class T>
struct A{
T value;
};
и есть у нас специализация
template<>
struct A<int>{
int value;
int another_value;
};

Как мне проверить, что у нас нет специализации для double, например?
Должно быть что-то вроде
static_assert(is_specialisation<A<double>>::value, "Not specialisation");
это должно падать а это
static_assert(is_specialisation<A<int>>::value, "Not specialisation");
должно проходить.
Аноним 31/05/19 Птн 23:46:40 1410112469
Аноним 01/06/19 Суб 00:23:06 1410120470
>>1410112
Чувак, ну ты серьёзно думаешь, что я первым делом на двач полез? Вариант через sizeof не работает, если базовая версия шаблона определена. Если бы было
template<class T>
struct A;
template<>
struct A<int>{}
Тогда другое дело. А так хуй, тот код выдаст тру на A<double>
Аноним 01/06/19 Суб 00:34:31 1410123471
>>1410120
> Чувак, ну ты серьёзно думаешь, что я первым делом на двач полез?
Ну, обычно так и происходит.

Онтоп - если метода с SO не сработала, то вообще хуй знает
Аноним 01/06/19 Суб 02:02:00 1410147472
>>1410123
>Ну, обычно так и происходит.
А, ну ладно тогда.
> то вообще хуй знает
Вот и я тоже хуй знает. Похоже, что никак.
Аноним 01/06/19 Суб 03:39:17 1410161473
>>1410078
А std::is_same тебе не подойдёт?
Аноним 01/06/19 Суб 10:15:02 1410193474
>>1410078
SFINAE тебе в помощь. Я бы сделал так: https://onlinegdb.com/SJrprjJCE
Недостатком является то, что нужно писать в каждую специализацию typedef.
Аноним 01/06/19 Суб 12:21:50 1410220475
>>1410161
И как его использовать здесь?
>>1410193
Я не могу изменять класc. Я вообще про класс ничего не знаю, кроме его названия.
Аноним 01/06/19 Суб 12:22:22 1410221476
>>1410220
> кроме его названия.
И количества шаблонных параметров.
Аноним 01/06/19 Суб 12:23:40 1410223477
>>1410221
Хотя это тоже не обяхательно по идее, потом можно было бы class... Args написать или типа того, но для простоты пусть будет известно, что один параметр всего.
Аноним 02/06/19 Вск 10:58:10 1410615478
сап двач. нужна помощь в написании простых программ с нуля по заданиям. кто то может написать за соответствующую оплату? писать на мыло kost-196@mail.ru
Аноним 02/06/19 Вск 11:22:12 1410619479
Посоветуйте иде на андроид.
Аноним 02/06/19 Вск 14:13:32 1410701480
asdfc.PNG (13Кб, 1075x326)
1075x326
wefw.PNG (12Кб, 820x258)
820x258
Почему пишет
> Player не является именем класса или пространства имен
Аноним 02/06/19 Вск 14:16:17 1410704481
>>1410701
Всё ок должно быть, мб ты опечатался где-то, например файл player.h, а ты инклюдишь Player.h
Аноним 02/06/19 Вск 14:23:23 1410708482
>>1410701
Pch должен самым первым инклюдом идти, если че
Аноним 02/06/19 Вск 14:26:17 1410711483
>>1410708
This, компилятор будет игнорировать все, что выше.
Аноним 02/06/19 Вск 14:38:50 1410719484
Аноним 02/06/19 Вск 15:03:50 1410741485
image.png (16Кб, 537x129)
537x129
Как constexpr передать в функцию?
Если сначала инициализировать переменную, то все работает, если пихать сразу в функцию, то хэш вычисляется в рантайме. Что за хуйня?
Аноним 02/06/19 Вск 15:28:45 1410760486
>>1410220
Как блядь, действительно.
std::is_same<double>(A::value).
Ты можешь явно проверить, какого типа переменная у объекта класса, если value будет из int специализации, то is_same вернёт false. Хоть почитал бы.
Аноним 02/06/19 Вск 15:33:50 1410766487
>>1410741
Чтобы ответить на вопрос, как передавать, нужно понять, как ты принимаешь
Аноним 02/06/19 Вск 15:39:21 1410768488
Аноним 02/06/19 Вск 15:49:21 1410770489
>>1410768
Если ты хочешь считать хэши в компайл тайме, то смотри в сторону std::array вроде как в 17 сделали так чтобы он работал в constexprt функциях
Аноним 02/06/19 Вск 16:31:12 1410801490
>>1410770
Зачем мне array? Просто хочу чтобы хэш вычислялся, когда его макросом в функцию пихаю.
Аноним 02/06/19 Вск 16:31:46 1410803491
sdfsss.PNG (31Кб, 1130x618)
1130x618
qq.PNG (23Кб, 1152x500)
1152x500
> Hockeyteam.exe вызвал срабатывание точки останова.
В чем может быть проблема?
Аноним 02/06/19 Вск 16:41:07 1410809492
Аноним 02/06/19 Вск 16:41:13 1410810493
>>1410803
Сам твой массив выделен с помощью new? Если нет, то к нему delete [] применять нельзя. Во вторых, ты применяешь оператор delete, предназначенный для удаления одиночных объектов, а не массивов (нужно delete []).
Аноним 02/06/19 Вск 17:02:41 1410826494
>>1410803
Лол, 4 утечки в конструкторе допустить это надо умудриться.
Аноним 02/06/19 Вск 17:09:38 1410833495
>>1410810
> Сам твой массив выделен с помощью new?
Да PlayerЗВ itsPlayers = new Player[DEFAULT_PLAYERS_COUNT];
>>1410826
Можешь пояснить?
Аноним 02/06/19 Вск 17:26:28 1410841496
var1.PNG (15Кб, 485x353)
485x353
var2.PNG (17Кб, 535x336)
535x336
>>1410809
Ну и еще вопрос, в чем принципиальная разница между 1 и 2 вариантами? Работает и тот и тот
Аноним 02/06/19 Вск 17:29:14 1410844497
>>1410841
В первом варианте меньше течет.
Аноним 02/06/19 Вск 17:31:00 1410847498
>>1410833
>Можешь пояснить?
Если вкратце, то ты просто скопировал объект Player, выделенный с помощью new, в массив. И далее просто переписал указатель, соответственно память выделилась, но не удалилась. Вообще в современных крестах использовать "сырые" владеющие указатели - моветон. Для это есть std::unique_ptr и std::shared_ptr. Чем они различаются гугли сам.
Аноним 02/06/19 Вск 17:37:47 1410850499
>>1410841
Принципиальная разница в том, что в первом варианте 3 объекта создаются на стеке и автоматически уничтожаются, когда выходят из области видимости, а во втором все создается в куче и утекает. Но все равно в первом варианте 1 утечка есть, но еще есть также 3 вызова move конструктора и 3 вызова copy конструктора, что бестолково с т.з. расхода ресурсов.
Аноним 02/06/19 Вск 17:45:22 1410854500
>>1410741
Бамп вопросу. Хочу красиво все в одну строку вместить, а то у меня жопа горит с задефайненых макросом аргументов.
Аноним 02/06/19 Вск 19:10:28 1410893501
why0.PNG (18Кб, 638x327)
638x327
why1.PNG (4Кб, 525x139)
525x139
why2.PNG (29Кб, 1168x367)
1168x367
>>1410850
>>1410847
>>1410844
Спасибо.
Алсо, попробовал запустить программу в code blocks c gcc, но компилятор выдает ошибку.
> 'Position' is not a class or namespace


Аноним 02/06/19 Вск 19:12:53 1410897502
>>1410833
>Можешь пояснить?
Правило буравчика - каждому new должен быть свой (обычно единственный) delete. Каждому вызову malloc должен быть свой вызов free.
Аноним 02/06/19 Вск 20:37:33 1410978503
>>1410893
Шарпопидор наелся говна. Я угадал?
Аноним 02/06/19 Вск 20:38:44 1410983504
>>1410978
Мимо, я студентик до этого только си и питон нюхавший.
Аноним 03/06/19 Пнд 01:25:54 1411106505
Как закомментировать область?
Аноним 03/06/19 Пнд 08:27:05 1411145506
>>1410741
Бамп вопросу. Как совладать с злым компилятором?
Аноним 03/06/19 Пнд 08:36:52 1411148507
Аноним 03/06/19 Пнд 11:08:28 1411196508
image.png (38Кб, 1205x149)
1205x149
ЧЯДНТ? Что там за хуйня? Почему не std::string?
Аноним 03/06/19 Пнд 11:14:23 1411198509
>>1411196
Ой, всё, идите нахуй. Поставил скобки и норм.
Аноним 03/06/19 Пнд 12:11:28 1411222510
Аноним 03/06/19 Пнд 12:12:16 1411223511
Аноним 03/06/19 Пнд 12:34:30 1411226512
Переполнение целочисленного это UB или не UB?
В частности беззнаковый char везде одинаково будет реагировать на отрицательные значения ну т. е. там, где ожидался знаковый char?
Аноним 03/06/19 Пнд 12:43:12 1411228513
Допустим, у нас есть шаблон. И в нем такое условие:
enable_if_t<is_same_v<_Tag, _Exact_args_t>, int> = 0>
что, конкретно, значит = 0 здесь? На SFINAE не похоже вроде.
Аноним 03/06/19 Пнд 12:59:36 1411229514
>>1411228
Немножко обосрался со скобочками, вот полный вариант:
template<class _Tag,
class _This2,
class... _Rest2,
enable_if_t<is_same_v<_Tag, _Exact_args_t>, int> = 0>
Аноним 03/06/19 Пнд 13:23:31 1411231515
>>1411226
Переполнение signed - UB, unsigned - не UB.

>>1411228
>>1411229
>что, конкретно, значит = 0 здесь
Значение шаблонного аргумента по умолчанию.
Аноним 03/06/19 Пнд 13:24:12 1411232516
Аноним 03/06/19 Пнд 13:25:06 1411233517
>>1411231
>Переполнение signed - UB, unsigned - не UB
А в чем разница в сущности?
Аноним 03/06/19 Пнд 13:30:05 1411235518
>>1411231
>Значение шаблонного аргумента по умолчанию.
Да, оно, спасибо, уже разобрался.
>>1411232
Нет, не SFINAE.
Аноним 03/06/19 Пнд 13:56:45 1411242519
image.png (30Кб, 410x502)
410x502
Как сделать итератор шаблонного класса со вложенным в него контейнером? Хуйня на пикриле не компилится, если убрать темплейт и заменить все Т на конкретный тип типо инт то оно работает.
Аноним 03/06/19 Пнд 13:59:32 1411246520
>>1411242
Добавь typename перед std::vector<T>::iterator. А лучше не жрать говно и написать auto, ну или просто сделать метод шаблонным, если хочется больше читаемости.
Аноним 03/06/19 Пнд 14:02:54 1411249521
Поясните за ->
Читаю книгу. При обращении к членам объекта до этого использовалась "." точка. Теперь какого то хуя появляется ->
Аноним 03/06/19 Пнд 14:07:03 1411253522
>>1411246
>написать auto
Бля все время забываю, что так можно, спасибо.

Кстати поясните в чем разница между for (auto& i : array) и for (auto&& i : array)? И то и то по сути ведь по ссылке берется без копирования, просто некоторые почему то пишут там двойную ссылку.
Аноним 03/06/19 Пнд 14:12:44 1411256523
Аноним 03/06/19 Пнд 14:16:54 1411257524
Аноним 03/06/19 Пнд 17:08:33 1411332525
Допустим, есть функция стороннего API, которое я не могу изменять, принимающая callback:

void foo(bool(*bar)(int, int)) {...}

Могу ли я передать в неё non-static member функцию? Например, эту:

class Hui {
...
bool pisos(int a, int b) { return true; }
...
}
Аноним 03/06/19 Пнд 17:22:37 1411336526
>>1411253
Оптимизированная версия вот этого: const T&.
Аноним 03/06/19 Пнд 19:42:23 1411365527
Хочу контейнер с упорядоченностью, возможностью быстрой вставки и удаления в начало и конец и возможностью быстро узнать, есть ли какой-то элемент в этом контейнере. Такое бывает?
Аноним 03/06/19 Пнд 19:44:24 1411366528
Законно ли в namespace std добавлять специализации существующих шаблонов классов/функций?
Аноним 03/06/19 Пнд 19:48:38 1411367529
>>1411365
Если не принципиально, куда вставляется, то std::map, std::set. Хранится уже в упорядоченном виде, вставка, удаление, поиск за логн.
Аноним 03/06/19 Пнд 19:56:14 1411370530
>>1411367
Под упорядоченностью я подразумевал сохранение порядка при добавлении.
Мне нужно что-то похожее на std::deque, но с возможностью проверить в нём наличие элемента, как в std::set.
Аноним 03/06/19 Пнд 20:03:39 1411373531
Аноним 03/06/19 Пнд 20:04:10 1411374532
>>1411370
Хз, можно обернуть map и deque, при добавлении добавляешь и туда и туда, если нужно найти ищешь в мапе и получаешь индекс за логн и по индексу за константу достаёшь из дека. Бредово немного, но по идее подскажет.
Аноним 03/06/19 Пнд 20:06:04 1411375533
>>1411373
>It is undefined behavior to add declarations or definitions to namespace
>It is allowed to add template specializations for any standard library class (since C++20)template to the namespace std
>добавлять специализации существующих шаблонов классов/функций
Дык я про второе и спрашивал как раз. То, что новые функции и классы в стд добавлять нельзя я в курсе.
Аноним 03/06/19 Пнд 20:09:27 1411380534
>>1411332
Так проверь на каком-нибудь ideone, тем более, что код уже сам написал.
Аноним 03/06/19 Пнд 20:09:55 1411381535
>>1411336
Съеби с моих двачей
Аноним 03/06/19 Пнд 20:11:39 1411382536
Аноны, поясните за pimpl, нихуя не понимаю? Зачем скрывать реализацию за другим классом.
Аноним 03/06/19 Пнд 20:12:11 1411383537
>>1411253
Первое lv ссылка, второе rv. Очень много почему так можно хотеть делать.
Аноним 03/06/19 Пнд 20:14:08 1411384538
>>1411382
Чтобы иметь стабильное abi, может ещё чтобы не компилировать вагон зависимостей.
Аноним 03/06/19 Пнд 20:16:08 1411385539
Аноним 03/06/19 Пнд 20:23:51 1411386540
>>1411382
Минимизация зависимостей, ты можешь менять имплементацию, при этом апи не будет меняться и не нужно будет перекомпилять всё.
Аноним 03/06/19 Пнд 22:30:50 1411438541
Учу qt
Есть такой фрагмент кода
Боже, не дай с разметкой проебаться


#include <QApplication>
#include <QPushButton>

int main(int argc, char argv)
{
QApplication app (argc, argv);

QPushButton button;
button.setText("My text");
button.setToolTip("A tooltip");
button.show();

return app.exec();
}

Вроде все просто если я правильно понял. Создается объект button класса QPushButton и вызываются его методы.

Потом используются указатели. Нахуя? Чем первый способ не подходит?


#include <QApplication>
#include <QPushButton>

int main(int argc, char
argv)
{
QApplication app (argc, argv);

QWidget window;
window.setFixedSize(100, 50);

QPushButton *button = new QPushButton("Hello World", &window);
button->setGeometry(10, 10, 80, 30);

window.show();
return app.exec();
}




Аноним 03/06/19 Пнд 22:44:14 1411444542
>>1411438
Ты не знаешь различие между объектом на стеке и на куче? Или не читал, как работает система parent-child в Qt?
Аноним 03/06/19 Пнд 22:50:17 1411447543
>>1411444
И то и то. Спасибо. Пойду читать
04/06/19 Втр 00:29:53 1411494544
>>1411381
Хули тебе не нравится? Зелень залетная.
Аноним 04/06/19 Втр 01:09:19 1411504545
Гайз, хочу поебать себе мозги плюсами.
начинал с плюсов своё вайтивайти. Уже 3 года макакоёбствую на Go.
Есть ли смысл учить плюсы и пишут ли какой- нибудь бекенд-хайлоад на плюсах ? Насколько долго затянется обучение ?
Есть ли смысл написать какой- нибудь пет со стеком C++/Mongo/какая- нибудь апишка ?
Аноним 04/06/19 Втр 10:22:42 1411598546
>>1411380
Что проверить, блять? Я не знаю как передать ссылку на этого мембера.
Аноним 04/06/19 Втр 11:12:25 1411611547
>>1411598
Без указателя/ссылки на класс никак ты свой non-static member function никак не вызовешь (если объект не в глобальной области видимости). Так что делай глобальной, либо static и передавай как &MyCls::MyFn, либо иди нахуй, токсик
Аноним 04/06/19 Втр 11:24:24 1411613548
>>1411332
Нестатические функции члены всегда скрыто принимают первым аргументом указатель на объект, из которого вызвана функция (this). Передать куда-либо можно с помощью std::bind с указанием этого объекта - bind(Class::func, &Object, std::placeholders::_1...). Без указания объекта никак. Короче, почитай про bind.
Аноним 04/06/19 Втр 11:51:53 1411620549
Есть тут человек, которому можно задавать тупые нубовские вопросы по ++ время от времени?
tme/dovaogedot
Аноним 04/06/19 Втр 12:46:11 1411651550
>>1411620
А этот тред чем не устраивает?
Аноним 04/06/19 Втр 13:14:14 1411675551
>>1411651
Слишком тупые вопросы, стыдно на людях.
Аноним 04/06/19 Втр 13:33:45 1411687552
image.png (44Кб, 528x218)
528x218
image.png (44Кб, 359x448)
359x448
>>1411651
Вот, например. Фунция возращает поломаные объекты шейдеров с пустыми source, но с правильными ID. На 146 строке шейдеры заполнены, на 147 source пропадает.
Указатели и ссылки я нигде не использую, разве функция не должна возвращать новую копию созданной на 146 строке ShaderProgram со своими копиями заполненых шейдеров, и удалить старую ShaderProgram по выходу? Почему эта функция возвращает ShaderProgram с шейдерами, у которых поля source превращаются в "", но ID остаётся?
Аноним 04/06/19 Втр 13:43:22 1411693553
>>1411687
Ну, это конечно, ты зря полез в графику без знания основ. Потоки ввода-вывода не копируются! Никакие!
Аноним 04/06/19 Втр 13:46:00 1411697554
>>1411693
Окей, как тогда правильно считать данные с файла, чтобы всё было как у других языков?
Аноним 04/06/19 Втр 13:51:12 1411700555
Аноним 04/06/19 Втр 14:08:45 1411705556
Аноним 04/06/19 Втр 14:28:15 1411712557
>>1411705
А ты не забываешь в конструкторах своих шейдеров вызывать конструктор базового шейдера типа vertexShader(string src):Shader(src){}. Если ты этого не делаешь, то часть базового класса сконструирована не будет.
Аноним 04/06/19 Втр 14:43:08 1411715558
image.png (66Кб, 561x403)
561x403
Аноним 04/06/19 Втр 14:51:28 1411719559
>>1411715
Напиши явно деструктор и поставь в него точку остановки, посмотри, откуда вызывается
Аноним 04/06/19 Втр 15:40:33 1411747560
Аноним 04/06/19 Втр 15:48:36 1411754561
image.png (6Кб, 438x59)
438x59
>>1411747
Если там будет Cat и Dog, наследующиеся от Animal, будет проще? Проблема в стирании std::string, а не в компиляции шейдеров.

>>1411719
Первый раз, как я понял, удаляются локальные копии параметров в конструкторе ShaderProgram. Второй раз они вызываются на 150 строке уже после создания ShaderProgram, перед выходом из getDefault(), уничтожая строки только что созданных шейдеров. Почему так происходит? Как быть?

И ещё третий раз деструкторы вызываются уже после вызова getDefault() из другой функции. Это я вообще не знаю зачем.
Аноним 04/06/19 Втр 16:05:34 1411761562
Shader.png (51Кб, 918x442)
918x442
Shading.png (35Кб, 960x493)
960x493
>>1411754
Собрал это, и никаких проблем не наблюдается. У тебя твои файлы с текстом не пустые? Лежат в папке рядом с проектом?
Аноним 04/06/19 Втр 16:23:36 1411771563
image.png (40Кб, 717x182)
717x182
image.png (37Кб, 591x196)
591x196
>>1411761
Пиздец да почему у меня всегда всё через жёпу.
Аноним 04/06/19 Втр 16:34:38 1411779564
>>1411771
Проверь как у меня на втором скрине. У тебя к 152 строке твоя выделенная на стеке строка уже уничтожена после выполнения return.
Аноним 04/06/19 Втр 16:40:06 1411782565
>>1411761
Так, блять. Причину этой хуйни я нашёл. Я просто ShaderProgram* program = &ShaderProgram::getDefault() долбаёб.
Как в таком случае сделать красиво, по правилам? Я хочу чтобы у меня в классе Human был мембер ShaderProgram. Инициализировать его мне нужно после конструктора Human. Значит, этот мембер не может быть на стеке, так? Нужен указатель на него. Нормально ли будет, если getDefault() будет возвращать указатель на ShaderProgram? Как это с точки зрения управления памятью?
Аноним 04/06/19 Втр 16:51:02 1411793566
Есть какая-нибудь книга или статья на 999+ страниц, типа такой -> https://www.horstmann.com/cpp/pitfalls.html ? Чтоб я такой хуйни больше не делал.
Аноним 04/06/19 Втр 16:55:02 1411796567
.jpg (66Кб, 477x700)
477x700
Аноним 04/06/19 Втр 16:59:32 1411799568
Source.png (83Кб, 1356x700)
1356x700
>>1411782>>141178>>1411782
Пусть твоя функция возвращает умный указатель на объект, выделенный в куче. Почитай про умные указатели -- сильно облегчают написание безопасного от утечек памяти кода.
Аноним 04/06/19 Втр 17:02:05 1411802569
image.png (741Кб, 770x577)
770x577
>>1411799
Ну я просто где-то читал, что типа объект, который создал указатель, должен сам за ним следить и удалять.
Аноним 04/06/19 Втр 17:10:08 1411807570
>>1411802
Умный указатель считается создателем указателя на кучу и освободит память в своем деструкторе, например, при выходе управления из блока кода, где он был создан. Они и были придуманы для решения проблемы частого забывания программистами добавить delete, где это нужно.
Аноним 04/06/19 Втр 17:41:45 1411820571
>>1411444
Прочитал. Не понял. Вот что произойдет если я буду объявлять объекты не через указатель?
Аноним 04/06/19 Втр 17:44:18 1411822572
Ананасы, поясните за указатели и наследование.
Вот есть, к примеру, класс https://github.com/SFML/SFML/blob/master/include/SFML/Graphics/RectangleShape.hpp (в конце файла есть небольшой пример использования)
Он наследуется от класса Shape который, в свою очередь, наследуется от других.
Вот я объявляю переменную RectangleShape на стеке, так как же тогда вся эта йоба магия с виртуальными функциями будет работать?
Аноним 04/06/19 Втр 19:09:46 1411850573
>>1411793
На хабре от PVS Studio регулярно постят статьи на подобную тематику. Ну и на сайте самих PVS кой-чего есть.
Аноним 04/06/19 Втр 19:19:35 1411856574
>>1411820
Ты конечно можешь все виджеты создавать на стеке, но зачем? Рано или поздно отстрелишь себе хвост по самое ебало.
https://doc.qt.io/qt-5/objecttrees.html
Аноним 04/06/19 Втр 19:27:37 1411862575
Хорошие книги по современному С++? Желательно 14 + 17 стандарты. На русике.
Аноним 04/06/19 Втр 19:28:04 1411864576
>>1411822
> Вот я объявляю переменную RectangleShape на стеке, так как же тогда вся эта йоба магия с виртуальными функциями будет работать?
Такие вызовы разрешаются статически, никакой магии тут нет.
Аноним 04/06/19 Втр 19:31:49 1411866577
>>1411802
Все так и есть. Поэтому специально были созданы юник/шаредптры, дабы облегчить жизнь нюфаням всем.
Аноним 04/06/19 Втр 20:17:39 1411893578
>>1411856
Я пока ссылку не открывал, но что подразумевается под отстреливанием хвоста?
Аноним 04/06/19 Втр 20:29:32 1411902579
>>1411893
Ссылку открыл. Если будут вопросы потом задам
Аноним 04/06/19 Втр 20:38:31 1411908580
>>1411856
Последнюю фразу не понимаю. Какой ущерб нанесен? Типо после удаления объекта по его адресу запишутся другие данные, а он пытаясь удалить себя второй раз сотрет их?
Аноним 04/06/19 Втр 20:46:03 1411914581
>>1411908
Я хуйню написал. Объясните мне пожалуйста
Аноним 04/06/19 Втр 20:48:35 1411916582
>>1411914
Я понял что деструктор вызывается дважды, но что может страшного случиться?
Аноним 04/06/19 Втр 20:57:47 1411919583
>>1411916
Удаление "удаленного" - undefined behavior. Если в деструкторе указателю бы присваивался nullptr после delete, то было бы все норм, но так никто делает, т.к. лишняя операция, которая замедляет производительность, ну и все-таки код на с++ должен писать не дебил.
Аноним 04/06/19 Втр 21:10:59 1411925584
>>1411919
Спасибо большое, анон. Что бы я без тебя делал?
Аноним 04/06/19 Втр 21:14:25 1411929585
>>1411864
То есть если я у производного класса и создам переменную этого типа напишу реализацию виртуальной функции, то вызывать будет именно она?

https://wandbox.org/permlink/HBzGnHgOXIGkroBA
Проверил. Так и есть.

Получается пользоваться указателями на базовый класс нужно когда есть чистые виртуальные функции или этот базовый класс используется как интерфейс?
Аноним 04/06/19 Втр 21:21:39 1411935586
1.png (355Кб, 606x881)
606x881
Аноним 04/06/19 Втр 21:24:32 1411938587
>>1411935
Эвон как.
А я всё время думал что для этого указатель нужен.
Аноним 04/06/19 Втр 21:52:44 1411970588
Screenshot from[...].png (96Кб, 1280x1024)
1280x1024
Объясните плз как работает этот аллокатор?
Почему там говорится, что они могут с помощью new выделить буферы и они после выхода из scope сами уничтожатся? Как это работает?
Аноним 04/06/19 Втр 22:22:59 1411977589
Аноним 04/06/19 Втр 22:24:37 1411978590
>>1411977
При чем тут Run-time type information?
Аноним 04/06/19 Втр 22:38:57 1411979591
>>1411978
Обосрался, RAII, конечно же. Вон на скрине написано даже. Ты прочитать не можешь что-ли?
Аноним 04/06/19 Втр 22:40:21 1411982592
>>1411929
Не знаю, какой ты смысл вкладывал в свои слова, но если бы работаешь только с наследником - принимай его по ссылке. Если хранишь - храни указатель (может даже unique_ptr). Если собираешься работать с объектами-наследниками базового класса через его интерфейс, то делай то же самое, но с указателем/ссылкой на базовый класс.
Аноним 04/06/19 Втр 22:48:54 1411984593
>>1411979
Вижу, конечно, только опять же, при чем тут raii, если это просто про расположение в конструкторе и деструкторе инициализации\удаления объекта. Тут непонятна магия с оператором new. Каким образом буферы int и float самоуничтожатся после выхода из локальной области видимости?
Аноним 04/06/19 Втр 23:05:28 1411986594
>>1411982
Спасибо.
Теперь по понятнее стало.
Аноним 05/06/19 Срд 05:07:17 1412030595
>>1411970
Это же книжка про игровые движки?
Там видимо переопределены аллокаторы памяти для int и float. Прога на старте хапает большой кусок из кучи и уже сама потом им манипулирует. В приведенном коде просто пример как это должно работать.
Аноним 05/06/19 Срд 08:39:35 1412053596
>>1405728
Не, ну, я не тупой, это-то я знаю. Я просто не понимаю, в чём профит от вектора векторов пар. Инт инт - это точка назначения и вес дуги?
Аноним 05/06/19 Срд 09:33:39 1412071597
Кто знает, можно ли в рисование на двумерную поверхность в Qt через opengl, а не через qpainter, и как оно по сравнению с gdi
Аноним 05/06/19 Срд 11:19:41 1412114598
вот сейчас будет тупой вопрос. Почему ui->label->setText("Yoba ") работает в projectname.cpp, но не работает в main.cpp?
Аноним 05/06/19 Срд 11:20:51 1412118599
>>1411970
Там же написано, после выхода из скопа вызовется деструктор, в нём popallocator.
Аноним 05/06/19 Срд 11:21:12 1412119600
Аноним 05/06/19 Срд 11:36:45 1412142601
>>1412030
>>Это же книжка про игровые движки?
Да, "Game Engine Architecture Third Edition Jason Gregory".
Вроде понял теперь. Т.е. работает это примерно так: переопределенный new сдвигает head стэкового аллокатора, а когда аллокатор уничтожается(когда выходим из scope), то head возвращается на старое значение?
Аноним 05/06/19 Срд 11:45:18 1412144602
>>1412142
Почитай про RAII, смысл такой, что вместо того, чтобы явно выделять и освобождать память ты создаёшь объект, в конструктор которого передаёшь new(или в твоём случае аналог на стеке, раз стековый аллокатор у тебя), а в деструкторе delete(у тебя popallocator) и когда время жизни у объекта кончится вызовется его деструктор, в котором освободится память. Это безопаснее, чем ручками это делать, потому что во-первых можно забыть, во-вторых если между твоим new и delete где-то кинулось исключение, то пизда, будет утечка, а в RAII случае RAIIobj(new int(5)); ... throw 2; ... у тебя после выброса исключения пойдёт stack unwinding, программа будет как бы откатываться до try, то есть у всех созданных объектов будет вызван деструктор, в том числе и у RAIIobj и поэтому память освободится и утечки не будет. Это оче норм тема и поэтому такой подход используют повсеместно.
Аноним 05/06/19 Срд 11:46:15 1412146603
>>1412071
>>1412119
неправильно выразился, не рисование, а наложение готовых картинок как в видеостене
Аноним 05/06/19 Срд 14:04:21 1412229604
LKC.png (13Кб, 933x238)
933x238
Сейчас приложение перемещает круг при нажатии на мышку (на её же позицию). Как сделать так, чтобы оно не просто меняло локацию одного PictureBox, а создавало новый, оставляя старую точку на месте?
Аноним 05/06/19 Срд 14:14:56 1412231605
>>1411231
>Переполнение signed - UB, unsigned - не UB.
unsigned не переполняется.
Аноним 05/06/19 Срд 20:25:16 1412399606
Аноним 06/06/19 Чтв 17:28:24 1412911607
Вот как в qt выполнить действие без события?Допустим я хочу чтобы как только я открыл программу label начал заполняться буквами. Но ui->label не работаетв main.cpp
Аноним 06/06/19 Чтв 19:15:44 1412967608
>>1412911
Че? Проблему опиши нормально
Аноним 06/06/19 Чтв 19:48:51 1412982609
>>1412967
Я могу выполнить действие используя событие (допустим нажатие кнопки). Но как выполнить действие без события? Запустил программу и сразу какая-нибудь функция заработала, как в консольных приложения. Тупо с первой строчки код выполняется.
Аноним 06/06/19 Чтв 20:03:29 1412992610
>>1412982
Ну вызови вручную обработчик этого события, в чем проблема? Например, у QPushButton есть сигнал clicked(), если ты его подключил к своему OnClickMyButton(), то ничего тебе не мешает вызвать OnClickMyButton() самостоятельно.
Если ты не знаешь, где вызывать, то вызывай там, где создашёшь.
Аноним 06/06/19 Чтв 20:10:08 1412998611
>>1412982
Код и так с первой строчки выполняется. Только при вызове exec() приложение входит в бесконечный цикл ожидая события.
Если у тебя есть ui, то я могу предположить, что это оконное приложение, и ты используешь дизайнер форм. Если это так, то ui - это член класса созданного окна. Присвоить текст лейблу можно в конструкторе, например, или прямо в дизайнере.
Аноним 06/06/19 Чтв 20:17:26 1413001612
>>1412998
>>1412992
Допустим я хочу сделать цикл for и в нем приписывать по одной букве лейблу. Нахуя? Не знаю. Но я также не знаю как сделать это, что важнее.
Аноним 06/06/19 Чтв 20:23:10 1413006613
>>1413001
Если ты напишешь обычный цикл, то не увидишь, как буковки появляются. Скорее всего тебе нужен таймер. Читай про QTimer, там скорее всего будет в примерах, как сделать то, что тебе нужно.
Аноним 06/06/19 Чтв 20:23:52 1413007614
>>1413001
бля. Я в каждом посте говорил "Допустим". мдаа
Аноним 06/06/19 Чтв 20:26:43 1413009615
Аноним 06/06/19 Чтв 21:32:27 1413051616
Странно, но эта хуйня работает. Вообще не понимаю. Говорят: main - главная функция, пиши в ней. Пишу в ней - не работает. Пишу в описании класса - работает.

#include "Test.h"

Test::Test(QWidget *parent)
: QMainWindow(parent)
{
int i;
ui->setupUi(this);
ui->label->setText("YZYKEN");
for(i=0;i<10;i++) ui->label->setText(ui->label->text() + QString::number(i));
}
Аноним 06/06/19 Чтв 21:35:22 1413054617
>>1401309 (OP)
возник вопрос, уже как бы не актуально но для общей эрудиции вот есть std::map, я его заполнил и хочу перебрать все ключи и объединить с похожими, это реально сделать? Ибо у меня после удаления элемента в цикле for (auto i: mapA){for (auto j: mapA){;}} что то шло не так и все ломалось я так понял это как то связано с итераторами которыея удалял, а через цикл for(int i=mapA.begin; i<mapA.end;i++) я так понял достучаться до значения по итератору шансов нет? и итераторы чет не поддерживают "="? Короче эту задачу можно было как то решить через map? или надо было использовать другой контейнер?
Аноним 06/06/19 Чтв 22:21:27 1413068618
>>1413051
Ты видимо совсем глупенький, раз вместо книжечек и мануальчиков слушаешь всяких дядек. Какой критерий "главности"?
>>1413054
Не уверен что с std map это прокатит, но обычно так пишут
for (auto it = myMap.begin(),...)
{
....if (isSame(...))
........it = myMap.erase(it);
....else
........++it;
}
Аноним 06/06/19 Чтв 22:27:15 1413071619
>>1413068
В книге так написано (я про main). Другое дело, что та книга к qt отношения не имеет.
Аноним 06/06/19 Чтв 22:29:31 1413072620
>>1413071
Хочешь Qt читай Макса Шлии
Аноним 06/06/19 Чтв 22:32:21 1413074621
>>1413068
вот тут у меня непонятки, после erase() что происходит с итератором? если они последовательны(++it, myMap.begin <it< myMap.end) то после удаления он должен сместиться?
Аноним 06/06/19 Чтв 22:39:26 1413078622
>>1413074
>>1413068
падажжи как ты из итератора it вызвал метод? и erase() вообще void
Аноним 06/06/19 Чтв 23:09:28 1413080623
>>1413078
http://www.cplusplus.com/reference/map/map/erase/

Объекты в std::map лежат в каком-то порядке, не важно в каком. При удалении положение объектов относительно друг друга не меняется.
Аноним 06/06/19 Чтв 23:11:27 1413082624
Аноним 07/06/19 Птн 12:21:33 1413232625
Почему QT взлетел? Дрисня же, которая тянет за собой несколько ДЕСЯТКОВ метров зависимостей. Сама среда разработки, говорят так себе. Нарушает концепции самого С++. Почему это говно юзают?
Аноним 07/06/19 Птн 12:46:33 1413248626
>>1413232
>Почему QT взлетел?
Потому что остальное для клепания формочек на крестах еще хуже. А здесь годная система сигналов-слотов, а не ебучих колбеков, как везде.
>Нарушает концепции самого С++.
Какие?
>Почему это говно юзают?
Не хочешь - не юзай, никто не заставляет.
Аноним 07/06/19 Птн 18:51:44 1413388627
>>1413232
Есть реализации основных протоколов под эмбедед + там говорят годный сейф рендер и красивые QML интерфейсы. Правда стоит это овердохуя.
Аноним 08/06/19 Суб 00:23:18 1413496628
>>1413232
потому что удобно и всё
Аноним 08/06/19 Суб 04:28:02 1413523629
>>1401309 (OP)
Анон, а как сейчас программируют на C++?
Когда я работал программистом-формошлёпом на C++, всё собирали с помощью qmake и гуя QtCreator'a.
А как делать правильно? То есть, как делают в Big-N компаниях и всем таком?
Пишут мейкфайлы, как в 80-х? Используют CMake? Не используют C++?
Аноним 08/06/19 Суб 09:43:18 1413542630
>>1413523
где как. в крупных компаниях, где проекты большие, обычно пишут свой сборщик (ну или кастомизируют какую-нибудь систему автосборки под себя).
Понятия "как правильно" - нет, каждый собирает как хочет. У нас вот cmake был сначала, потом на него забили и написали свой билдер, так на нём и сидим до сих пор.
Аноним 08/06/19 Суб 11:52:29 1413565631
Аноним 08/06/19 Суб 15:18:18 1413655632
Аноним 25/06/19 Втр 12:43:15 1421962633
>>1412229
auto Pic = gcnew PictureBox(...);
...
litsPictureBoxes->Add(Pic);


litsPictureBoxes - заранее созданный контейнер в свойствах формы
Аноним 27/06/19 Чтв 10:00:47 1423009634
image.png (28Кб, 634x155)
634x155
image.png (16Кб, 318x185)
318x185
image.png (28Кб, 1155x192)
1155x192
Двач, объясни какого хуя. Почему если пытаюсь захватить что-либо в лямбду, оно ругается что арг лист не такой?
Аноним 27/06/19 Чтв 12:52:38 1423149635
>>1423009
лямбда неявно разворачивается грубо говоря в структуру с перегруженным оператором () и членами, который ты захватил. Без захвата - в указатель на функцию. Поэтому лучше юзать std::function<T>
Аноним 06/07/19 Суб 00:53:56 1428768636
Аноны, реквестирую способы перестать орать с Майкрософта. Где среди тонн документации по HTTP Server API найти имя сраного .lib файла, чтоб линковать с ним? Да да, я в консолечке погроммирую, и знаете, нравится, вкусно так, экзотично. Так вот, какого хуя никто все еще не ответил? А, я ведь пост не отправил, лол. Ща исправл
Аноним 06/07/19 Суб 01:03:12 1428770637
Аноним 06/07/19 Суб 02:26:47 1428794638
blob (147Кб, 480x360)
480x360
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯДЬ!!!!!!!!
Почему WinHttpSendRequest шлет лишь ебучий глагол?
Вот реально, вместо сервера запустил голую слушалку на winsock-ах, и прилетает только 4 байта "POST". Это пиздос, чините мой пердак, аноны!!!
Аноним 06/07/19 Суб 03:08:04 1428799639
Аноним 06/07/19 Суб 03:08:48 1428800640
Я вот не понимаю нахуя создавать 90 тред, если есть 87 не потертый?
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов