Этого треда уже нет.
Это копия, сохраненная 24 мая 2017 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
68 Кб, 600x410
C++ #48 #947007 В конец треда | Веб
Шапка: https://github.com/sosachbot/cppthreadhat/wiki
Утонувший: >>931827 (OP)

Ищите тред по слову "кресты".
#2 #947028
Повторюсь

Здрасте всем. Че интересного можно на qt написать, подкинете идей оригинальных?
#3 #947033
>>947028
Вкотился
аустический гуй
#4 #947048
>>947028
Скачай Battle.net аппликуху от близзарда и попробуй повторить
947052
#5 #947052
>>947048
хуя ты выдал)
947053
#6 #947053
>>947052
))))))))))
#7 #947072
Какие годные видосы с CPPкон-ов и прочих митенгов посоветуете?
947086
#8 #947086
>>947072
Там дохуя всякого интересного. Например, https://www.youtube.com/watch?v=WDIkqP4JbkE
947133948728948949
#9 #947087
>>947028

Если ты математег, то сделай рисовалку графиков функций или алгоритм отрисовки графов.

Если ты не только математег, то сделай что-то для сферы, которая тебя интересует.

Если ты только "кодить" умеешь, то сделай компилятор.
947091
#10 #947091
>>947087

> рисовалку графиков функций


Нахуя?

> сделай компилятор


Нахуя?
947104947204948731
#11 #947104
>>947091
тогда пили игрушку
#12 #947114
Как сконпелировать под винду, если у меня ubuntu и g++?
947117947121
#14 #947118
>>947117
понял
#15 #947121
>>947114
тевстиравыть как будишь?
947125
#16 #947125
>>947121
Да мне для laba1
#17 #947133
>>947086
Спасибо, посмотрю завтра на работе. Если еще че подкинешь - буду благодарен.
#18 #947204
947451
#19 #947389
У кого остались пики из летних шапок тренда?
#20 #947396
>>947007 (OP)
C++17 REMOVED:
register, keyword reserved for future use
bool b; ++b;
trigraphs
if you still need them, they are now part of your source file encoding, not part of language
ios aliases
auto_ptr, old <functional> stuff, random_shuffle
allocators in std::function
947524
#21 #947451
>>947204
Там большая часть для php макак
#22 #947524
>>947396

>register, keyword reserved for future use



bombeet

>bool b; ++b;



Ибо нехуй, b|=1 лутше.
947547
#23 #947547
>>947524

То есть не b|=1, а b||=1
947561
#24 #947561
>>947547

> b||=1


Чем лучше b = true?
947657
#25 #947572
Максимально прошаренные в С++ тут есть?

Кто-нибудь здесь разрабатывал хайлоад приложение или владеет навыками для разработки на этом фреймворке?
http://cppcms.com/wikipp/en/page/main
947658
#26 #947657
>>947561

Именно это - ничем, но переменные були надо ОРать, а не складывать.
#27 #947658
951724
5 Кб, 691x69
5 Кб, 853x136
#28 #947810
кнопелятопроблемы ИТТ

Какого фига оно не создаёт каталог? На другом ноуте такого дерьма не наблюдалось. Кириллицы, или ещё каких-нибудь дерьмознаков в пути нет.

Де мой ебаный кнопелятор?!
948904954383
#29 #947815
Зачем вы используете плюсцы, когда обычная си лучше? Да и вообще название плохое у си плюс плюс. Надо было хотя бы назвать си минус плюс. А лучше чтобы не было похоже на си, теперь когда я пытаюсь найти что-то по си находится по си++. И даже -c++ не помогает это исключение слова в гугле
947816
#30 #947816
>>947815
Слишком толсто. Тебе делать нечего? Иди вон - в доцку поиграй, читы для коэсика напиши. Чё ты, а?
#31 #947824
Моя уходить обратно в c#
Спасибо всем, кто помог с крестами
947860948441
#32 #947860
>>947824
Удачи
947885
#33 #947885
>>947860
Спасибо!
#34 #947906
int i, &ri = i;
i = 5; ri = 10;
std::cout << i << " " << ri << std::endl;


Я чёт не понял, а чому оно выводит 10 10?

То есть, если мы задаём значение ссылки, то и значение объекта, на который мы ссылаемся тоже будет иметь это значение, даже если мы его отдельно задаём?
947921948369
#35 #947921
>>947906
Ты дальше 5 страниц любой книги открывал?
ri это, фактически, алиас для i. Меняешь одно, меняется второе. Меняешь второе - меняется первое.
947952
#36 #947952
>>947921

>Ты дальше 5 страниц любой книги открывал?



Уже на 87 :3
#37 #948369
>>947906
В этом и суть ссылок. Ссылки - более сейфовые и удобные указатели.
Если бы ты хотел, чтобы было две отдельных переменных, нужно было их и создавать, а не ссылку делать.
#38 #948389
Плюсач, у меня тут в Qt нужно передавать между формами виджетами ебаную кучу переменных. Костыли типа static class подчеркиваются в QtCreator как неправильные, а проинициализировать static переменные негде. Как мне их передавать, не в сигналах же?
948403
#39 #948403
>>948389
Причем тут static вообще? Либо сделай конструктор, который будет инициализировать, либо публичный метод у виджета и вызови его перед show();
948407
#40 #948407
>>948403

> void widget->setData(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, unt i11, int i12, int i13, int i14, int i15, int i16, int i17, int i18, int i19, double i20);


Хуита какая-то.
948412948529
#41 #948412
>>948407
Что за данные-то?
948414
#42 #948414
>>948412
Данные для лабораторной по алгоритмам
948417
#43 #948417
>>948414
В класс закинь и передавай. И что за static class? В плюсах такого вроде нет.
948625
#44 #948441
>>947824
Очередной неосилятор?
#45 #948529
>>948407

>венгерская нотация


>2017

#46 #948625
>>948417

>что за static class


Наверно из c#. Типа класс состоящий полностью из статических полей и методов.
#47 #948728
>>947086
Бля, когда-то пытался осилить, но он какой-то долгий и нудный
Мне выступления этого мужика нравятся, его рили интересно смотреть
https://www.youtube.com/watch?v=FnGCDLhaxKU&t=5649s&list=LLVWpQXxsK6jOFPVbmvUvbSQ&index=7
#48 #948731
>>947091

> сделай компилятор


>Нахуя?



Чтобы разобраться как он работает и показать, что можешь, очевидно
948977
#49 #948736
>>947028
RS232 терминал с отображением байтов как в HEX-редакторе. Как ни странно, таких почти нет. Более-менее удобный терминал это http://hawkit.ru/progs/wterm/wterm.html
HTerm все же хуже.
948748
#50 #948748
>>948736

>com-порт



Их ещё используют?
948762948978
#51 #948762
>>948748
Лично писал коммуникацию между ком портами для левого говножелеза. До сих пор это стандарт во многих промышленных девайсах. Например, если взять специальные платформы для сетевых девайсов, на базе которых можно сделать, допустим, промышленный роутер - там везде есть дырки под COM порт
948989
Гой #52 #948794
В нулевом ничего нет. Что почитать на русском языке про базы данных. Какой язык структурированных запросов лучше и отрытее?
948802
#53 #948802
>>948794
Алан Бьюли, «Изучаем SQL».
949265
#54 #948904
>>947810

Компилятор в студии и в WDDK, лол. Не нравится - ставь кит для мингв.
948912
#55 #948912
>>948904
Просто что меня больше всего удивило: до этого я устанавливал креатор на другом ноутбуке. Сделал вполне стандартную установку, галочки не трогал. Но до этого возился с кнопелятором от мингв для коделайт. Но вроде поудалял всё.

Хочешь сказать - в этом дело? Или стоит переустановить креатор?
948916
#56 #948916
>>948912

Я хочу сказать, что в КуТэ для МСВЦ нет компилятора.
948917
#57 #948917
>>948916
Всё, понял. Благодарю
#58 #948930
У меня ж стояла визуалстудия, только я её удалил. Пхд остались куски кнопелятора и кути не захотел ставить свой.

Хорошо, что есть апдейт компонентов
#59 #948949
Здаров программисты. Наткнулся на такой вопрос на стеке http://stackoverflow.com/questions/17032267/c11-range-based-for-loop-efficiency-const-auto-i-versus-auto-i
Поясните плз, Я так и не понял что выгоднее использовать в его случае!

>for(auto i : vec)


Или

>for(const auto &i : vec)



>>947086
В этом видео к примеру юзают второй вариант, на 2:16.Ведь, большие дядьки хуйни писать не будут
провёл мини тест, и на моей пеке они работают вроде одинаково быстро... Или дело не в скорости, а в памяти?
плз проясните ситуацию
948956
#60 #948956
>>948949
спецификатор auto не выводит ссылочный тип, то есть, допустим, у тебя есть
std::vectir<W> a;
auto b = a;

Здесь произойдет копирование переменной a в переменную b (без учета оптимизаций компилятора, конечно же), если ты сделаешь так:
auto &c = a;

Переменная c будет просто указывать на a, то есть являться lvalue-ссылкой.
Если ты применяешь определение
auto &&d = a;

d в зависимости от последующего поведения a будет являться либо rvalue либо lvalue ссылкой.

Касательно твоего примера, если ты применяешь первый способ, тогда каждый элемент из vec ты копируешь перед использованием, что может быть накладно, если же ты применяешь auto & - объявление lvalue ссылки, тогда переменная i будет УКАЗЫВАТЬ на итерируемый элемент из vec. Если ты желаешь делать ее еще и неизменной, тогда дописываешь const.
948958
#61 #948958
>>948956

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


>если же ты применяешь auto & - объявление lvalue ссылки, тогда переменная i будет УКАЗЫВАТЬ на итерируемый элемент из vec.


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

>что может быть накладно


Почему?
948959948960
#62 #948959
>>948958

>because a copy is cheaper than aliasing.


То есть лучше выбирать
for(auto i : vec)
??
#63 #948960
>>948958
Смотря о чем идет речь. Если у тебя, к примеру, используется вектор int'ов или float'ов или других встроенных типов, тогда разницы особой не будет. Если ты перебираешь вектор структур данных или классы, то, лучше использовать ссылочный тип. А вообще, в свое время, Скотт Мейерс рассосал эту тему порядком и, если не ошибаюсь, советовал по-чаще применять auto&&, поскольку, тут уже компилятор решит, что будет быстрее.
948961
137 Кб, 346x332
#64 #948961
>>948960

> Скотт Мейерс рассосал эту тему


Эсли бы ты подогнал годный линк, былобы ахуенно
948962
#65 #948962
>>948961
Короче, книга называется "Эффективный и современный C++", конкретно по c++11 и c++14, так вот, у меня выводи типов для auto на 31 странице открыт, но, конечно же, лучше начать читать с самого начала, поскольку там идет вывод типов для шаблонов и прочего, а это немаловажно при подступлении к auto.
#66 #948977
>>948731

> Чтобы разобраться как он работает


А что тут непонятного?
949146
#67 #948978
>>948748
Ахуеть как часто
#68 #948989
>>948762
Скорее всего под 485, но UART, как промышленный стандарт передачи сообщений до сих пор широко используется.
192 Кб, 702x702
161 Кб, 1336x736
#69 #949027
Анон, подскажи как работать с данными, тип которых не определён заранее.
Пишу игрушечную базу данных на C++Qt (правда всякие йоба-средства Qt использовать не хотелось бы).
Таблица хранится в файле, в начале файла храниться схема отношения (шапка таблицы с именами и типами полей) и дальше лежат записи.
Так вот, как с записями работу организовывать? Писать отдельные классы для обработки полей разных типов, с общим родительским абстрактным классом?
949057949073
#70 #949057
>>949027

База данных может знать о содержимом, о типе данных (и тогда она сможет индексировать и сортировать) а может и не знать.

Если ты хочешь, чтобы база данных знала о содержимом, у тебя есть какая-то конкретная задача. Изложи её.
949065
53 Кб, 400x590
#71 #949065
>>949057
"Create, read, update and delete."
Например тот же поиск, примерно соответствует операции выборки. (Выбрать из таблицы записи с определёнными значениями полей. И эти значения естественно не в байтовом "хранимом" формате задаются.)
949088
#72 #949073
>>949027
У тебя QVariant есть, который может хранить различные типы данных, для которых объявлены или допустимы копирующие присваивания.
Касательно базы данных, что именно ты хочешь? Из любого запроса результатом ты получаешь множество записей, которые перебираешь по-очереди и элементы этих записей как раз и представляются QVariant.
#73 #949088
>>949065

То есть: у твоих записей есть некоторое множество текстовых (и численных?) полей.

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

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

Мапы эти должны где-то храниться, иначе процедура может искать слишком медленно.
#74 #949129
Привет
949144949187
#75 #949144
>>949129
привет
#76 #949146
>>948977
Типо ты без написания своего компилятора знаешь, как работает лексер, как идет парсинг в АСТ дерево, как проходит семантический и синтаксический анализ, как работают оптимизации в фронт-енд части, как происходит трансляция и генерация машинных инструкций вместе с их оптимизациями(распределение регистров и тд)?
949191
#77 #949187
>>949129
Привет. Как дела?
949195
sage #78 #949191
>>949146
Я вот ниче из этого не знаю. Есть годная литература или ссылки где почитать для нюфагов?
949194
#79 #949194
>>949191
Красная книга драгона
949198
#80 #949195
>>949187
Отлично. А у тебя?
#81 #949198
>>949194
Спасибо, ознакомлюсь.
#82 #949253
посоны, есть какие-то либы, чтобы сделать вебмку из собственных музыки и картинок на крестах? мувимейкер не советовать
Гой #83 #949265
>>948802
так значит MySQL ? Просто раньше думал он майкрософтовский...
#84 #949277
>>949253
ffmpeg
#85 #949279
>>949253

Чтобы сделать видос тебе нужно:
- либа для видеокодека
- либа для контейнера
- либа для аудиокодека
- либы для декодирования всего этого

Декожируешь картинки, составляешь их них входные кадры для видеокодека. Что ты там будешь делать с аудио - не знаю, для начала можешь пихать в контейнер без изменений.

Есть ли что-то проще - не знаю.
#86 #949280
#87 #949283
Ананасы, можно ли как-нибудь отключить автоматическую перерисовку у QGraphicsView и перерисовывать его вручную, когда мне надо?
949307949308949309
#88 #949303
>>949253
как вы думаете если этого мудака запереть в комнате с компом на котором установлена вижуал студия + давать ему все доступные спеки по запросу (но не код)
через сколько лет он напишет .exe способный конвертнуть .webm из .jpg + .mp3?
думаю это будет как в "олдбое" только тот кулаками об стенку стучал, а тут будет стучать по клаве
#89 #949304
>>949303
Думаю, месяц-два. Это не так сложно, если под рукой есть любая литература + стековерфлоу(ну и дохуище свободного времени)
#90 #949307
>>949303

>(но не код)


>>посоны, есть какие-то либы



>>949283

1 минута во встроенной документации: ViewportUpdateMode
949339
#91 #949308
#92 #949309
>>949283

Олсо, зачем тебе перерисовывать его вручную? Тебе придётся следить за тем, как другие окна перекрывают твой виджет, разве нет?
#93 #949318
>>949303
ну хорошо, какие команды мне гуглить, чтобы писать такой конвертер на чистом С++?
949319
#94 #949319
>>949318

Чьлюы писать на чистом C++ теюе нужны стандарт языка и стандарты всех технологий, которые ты будешь использовать: mp3, MP4, Matroska, H264 и так далее.
#95 #949321
Ребята, посоветуйте актуальную литературу по opengl или видеоуроки. Как вообще сами это учили?
949329949344
#96 #949329
>>949321
Хочешь скооперируемся. Сам пытаюсь что-то написать на этом, но пока что дальше мануалов и хеллоуворда не дошел.
949337
#97 #949337
>>949329
Я и до хеллоуворда не дошел, только вот источники знаний искать начал.
949378
#98 #949339
>>949307

> 1 минута во встроенной документации: ViewportUpdateMode


Спасибо
#99 #949344
>>949321
С новыми шейдерами даже хуелоу ворлд хуй осилишь. Делай сначала свой опенгл, на хабре есть серия охуенных статей, заодно поймешь как это работает.
#100 #949378
>>949337
https://2ch.pm/gd/res/195365.html (М)
Вот тут все, что надо есть. Если хочешь начать с хардкора, то можешь скачать книжку OpenGL Superbible или OpenGL Programming Guide. Вот тут да, пиздец, материал подан для тех, кто уже, видимо, пользовался этой технологией. Есть книжка по-проще и ее вполне достаточно для каких-то не самых навороченных игрух или движков, показывают как рендерить полигоны, потом модели освещения, простые тени (без антиалиасинга, естественно и динамического затенения), называется OpenGL ES 3.0 Cookbook. В целом, все, что там описано, применимо и для десктопного OpenGL, но вот второй в плане возможностей по-шире (в сравнении ES 3.0 и GL 4.5).
Все нормальные драйвера (за исключением AMD, которые не смогли обеспечить нормальную поддержку 4.5 для карт 6000 и ниже серии), уже давно поддерживают стандарт 4.5, так что, наверно, лучше пользоваться самыми свежими ништяками, а не барахтаться в куче легаси.
949638
#101 #949390
Читаю Страуструпа, он рекомендует визуал студио, посоветуйте какого года? 2015 год встраивает свой код, а 2017 экспресс можно с майков скачать, но у меня тут есть вопросы, оно того стоит? там большой выбор флагов в бесплатной!!! зачем нужна тогда платная? что бы не звисала? кстати, 2017 зависает или что? дайте совет,
949558949565
#102 #949399

> 2015 год встраивает свой код


> 2017 экспресс можно с майков скачать, но у меня тут есть вопросы, оно того стоит? там большой выбор флагов в бесплатной!!! зачем нужна тогда платная?


Тебе не похуй ли?
#103 #949410
нет, не похуй
#104 #949558
>>949390

>2015 год встраивает свой код



Поясните.
#105 #949565
>>949390
Друг.
Хочешь писать на крестах - сразу же Linux и GCC.
На других платформах на крестах уже ничего давно не пишут толком.

Студия по остаточному принципу кресты поддераживает. С ней ты просто заебешься потом работу профильную искать.
949568949601
#106 #949568
>>949565
Стауструп советует студию, на линуксе какую иде?
949578949637
#107 #949578
>>949568
Не знаю что советую Страуструп, мне как-то пофиг, что он советует.
Я Qt Creator и Code Blocks использую.
#108 #949601
>>949565
Весь ААА геймдев - студия & винда. Пердолики с ГЦЦ да, нужны, но на деле - учиться лучше в студии. Она в разы дружелюбнее, чем любое красноглазие, топовый дебаггер, да и вообще мимими.
949634
#109 #949634
>>949601
КРоме ВСЕГО ГЕЙМДЕВА, еще что под виндой?
949653
#110 #949637
>>949568
Нахуя тебе иде? Консоль+гдб-волгринд+плагины для твоего редактора(nano, vim, emacs, sublime)
#111 #949638
>>949378
От души спасибос
#112 #949647
>>949253
FFMPEG уже советовали, из вариантов попроще - gstreamer.

>>949303
Недели две-три по 8 часов в день, если знает основы сей/плюсов.
#113 #949653
>>949634
Весь клиентский софт для редактирования/создания контента, банковский низкоуровневый клиентский софт, все медийные клиенты, включая теперь и vr, почти все утилиты.

На никсах - я в рот ебал писать что-то кросс-дистрибутивное (=популярное) на плюсах, нужен отдельный человек чтобы этот зоопарк поддерживать.
949881
#114 #949881
>>949653
80% вакансий С++ требуют знания линукса и gnu toolchain, так что изучая только виндузный С++ рискуешь соснуть.
#115 #950029
Няши, я просто в печали. Неужели под кресты нет парсера HTML? Написал прогу на пиздоне, скачивает все страницы одного сайта, и вытаскивает с каждой нужную инфу (находится в div с уникальным классом). Но пиздон работает оче медленно, прямо ужас. Сейчас переписываю на qt, потому что легче, но отсутствие просто вымораживает. Я уже и сам пытался писать, но чего-то сложно. Неужели никто не написал до меня?
950034
#116 #950034
>>950029
"Загружаешь страницу, вытаскиваешь QWebElement" не походит?
950858
#117 #950095
какие у полноценной студии есть полезные аддоны, что стоит из-за них вместо экспресс пользоваться коммьюнити версией.
950159
#118 #950159
>>950095
Resharper C++
13 Кб, 825x245
#119 #950248
Такая проблема, нужно сбилдить буст под vc8, на компе установлена помимо vc8 еще и vc14, при запуске консиольки vc8 компилятор говорит, что его версия - 14.
Из PATH все упоминания vc14 удалил, комп перезуагружал - все то же самое.
Есть ли решение этой проблемы, кроме как удаление vc14 и последующая (как правило) переустановка vc8 ?
950273950327
#120 #950273
>>950248
таки всё верно, у vs2005 (vc8) с++ конпелятор 14 версии. а у vs14 - 20 или даже 21
950475
#121 #950327
>>950248
ЕМНИП, в каждой из студий в папке VC должен быть батник vcvarsall, который устанавливает системные переменные.
Ну а дальше, я думаю, ты поймешь.
950475
#122 #950367
Кто-нибудь пользовался визуализаторами изображений для деббагера в Visual Studio? Сейчас погуглил -- там довольно много всяких разных. Какой самый лучший?
#123 #950475
>>950273
>>950327
С компилятором все было в порядке, версия дейтсвительно соответсвует, проблема была в том, что либы буста генерировались в виде vc140.lib, а нужен был vc80. Впрочем, удалив 15ю все решилось.
21 Кб, 416x166
#124 #950481
Вопрос скорее общий, по булевой алгебре, но спрошу тут.
Нужно проверить что из первых трёх "битовых флагов" с пика выставлен только один.
Сам придумал только
!( (A && B) || (A && C) || (B && C) )
где
A = flag & INT36
B = flag & REAL
C = flag & STRING

Можно это как-то упростить?
950501950649950651
#125 #950501
>>950481

Можно как-то так:

notzero(A)+notzero(B)+notzero(C)==1

Можешь маленькую функцию написать, которая возвращает 1 в ответ на ненулевое значение.

inline int notzero(int q){return q?1:0;}

В операторах && и || сделать проще не получится.
56 Кб, 728x269
#126 #950539
Что я делаю не так?
950598
#127 #950598
>>950539

Type - это что?
#128 #950649
>>950481
bool isA = (value & ~A) == 0;
bool isB = (value & ~B) == 0;
bool isC = (value & ~C) == 0;

bool valid = isA || isB | isC;
950650950656
#129 #950650
>>950649

>> || isC


>> fix

#130 #950651
>>950481
return (flag & (flag-1) == 0) && (flag != 0);
950666
#131 #950656
>>950649
еще проще:
value = value & (A | B | C);
bool valid = !(value ^ A) || !(value ^ B) || !(value ^ C);
950666
#132 #950666
>>950656
->
>>950651
самый простой и быстрый вариант.
300 Кб, 521x704
130 Кб, 868x727
#133 #950785
Бля, помогите лог ошибок прочитать, я не могу понять откуда она идёт.
Скорее всего с конструкторами обосрался, т.к. пытался не вводить конструкторы без аргументов.

Например есть два класса и один содержит другой:
class Fuck {
QVector<Shit> shit;
Fuck( QVector<int> inits );
}
class Shit {
Shit( QVector<int> inits );
}

Когда Fuck-мемберу QVector<Shit> понадобиться конструктор Shit и обойдётся ли он без пустого конструктора Shit()?
Будет ли правильной такой конструктор Fuck:
Fuck::Fuck( QVector<int> ) {
for(int i = 0; i < inits.size(); i++)
}
950789950821
11 Кб, 320x180
#134 #950789
>>950785

>Fuck::Fuck( QVector<int> ) {


> for(int i = 0; i < inits.size(); i++)


> shit.append(Shit(inits));


>}


Фикс, не дописал.
950798950850
#135 #950798
>>950789

>shit.append(Shit(inits


Макаба почему-то убирает [i'], лол.
мимокрок #136 #950821
>>950785

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



Как только ты пишешь один конструктор, дефолтный конструктор скрывается.

Field::Field()=default; - и у тебя снова будет дефолтный (нужен С++11+).
950825
45 Кб, 168x182
#137 #950825
>>950821
Бля, так я не хочу вводить дефолтный конструктор, у меня часть полей - const, они должны быть определены при создании.
950835950841
#138 #950835
>>950825
Ввел тебе сваива пайтона в ухо, ббгге.
#139 #950841
>>950825

>Бля, так я не хочу вводить дефолтный конструктор,



А зачем ты его используешь тогда, лол?
950850
51 Кб, 572x546
103 Кб, 1030x601
#140 #950850
>>950789
Поправил и поверил этот пример - действительно не работает.
Зато работает если QVector заменить на QList.
В принципе предсказуемо, но я надеялся что QVector не пытается выделить память под элементы когда он пустой.
>>950841
Так я не использую, QVector<T> использует даже если элементов в нём ещё нет.
950863950865
#141 #950858
>>950034
Вполне возможно, что и пойдёт, но на офф сайте документации очень мало, а книги по qt про это тоже не пишут. Не знаешь, где найти статьи/книги/гуиды по вебэлементу?
44 Кб, 451x440
#142 #950863
>>950850
Но если поле Shit.x сделать const то уже не компилируется, т.е. QList зачем-то нужен уже Shit& Shit::operator=(const Shit&) (которого нет из-за константного поля).
Причём если использовать QVector, при наличии const поля и добавить конструктор Shit() : x(0) {} то всё прекрасно работает.
Хуле QVector и QList там внутри делают, блять?
950868950877
#143 #950865
>>950850

>Так я не использую, QVector<T> использует даже если элементов в нём ещё нет.



Он его не использует (т.е. он бы не запускал его, если бы его не было). Просто объект, который в QVector, должен обладать дефолтным конструктором. Ты не можешь расширить QList, но ты можешь расширить QVector, и для расширения нужен дефолтный.
#144 #950868
>>950863

И вообще, вот тебе исходники, сам смотри.

https://github.com/qt/qtbase/tree/49dc9aa409d727824f26b246054a22b5a7dd5980/src/corelib/tools
#145 #950877
>>950863

> Shit& Shit::operator=(const Shit&)



Наверняка нужен для присвоения QList.

Скорее всего у тебя будут те же проблемы с std::vector (там есть resize) и std::list.
#146 #950890
Нет ли уже крякнутой 2017 студии?
950897
#147 #950897
>>950890
Чем тебя коммунити не устраивает?
950918
#148 #950898
Ну и сюда вкину. Суть проблемы такова:

Есть потребность в работе с post get запросами и прочей еболой в протоколе https. Пробовал сначала просто скачать файл через Qt QNetworkAccessManager—он меня нахуй посылает, мол
QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method

Ну я гуглил, гуглил, пацаны сказали, устанавливай OpenSSL, вот тебе уже собранный. Установил—всё равно ругается.

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

Сильно только не бейте, с сетями вообще ни разу не работал, да и вообще неделю назад хеллоу ворлд написал.
950901950984951075
#149 #950901
>>950898
Вангую что ты не линковал библиотеку при компиляции.
950926
#150 #950918
>>950897
А вы всегда отвечаете вопросом на вопрос?
950934
#151 #950926
>>950901
Возможно. В любом случае, вопрос

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


не снят. С чем меньше всего ебаться придется? Алсо, реквестирую годные статейки желательно на русском, но там как пойдет на тему взаимодействия с сайтами.
950935
#152 #950934
>>950918
А почему вы таки спрашиваете?
#153 #950935
>>950926
Тебя ждет очень большая ебля. Взаимодействие с сайтами - большая дыра в крестах, и qt исправляет проблему лишь немного. А вообще - на
"QSslSocket: cannot resolve ..." можешь забить, всё и без этого работает, брат жив.
950940950943
#154 #950940
>>950935

> всё и без этого работает,


Ну хуй знает, у меня ответ не пришел.
950945
#155 #950943
>>950935

> Взаимодействие с сайтами - большая дыра в крестах


А где всё заебись?
950945950949
262 Кб, 1938x904
#156 #950945
>>950940
А, извиняюсь, у меня несколько другая ошибка вечно выскакивает. При этом запрос идёт.
>>950943
В пиздоне заебись, но он медленный шо пиздец. Зато в нем есть и отличная работа с html, и человеческие запросы. Разве что система сокетов в QT лучше зделана.
950950950952950981
#157 #950949
>>950943
Относительно, в D. Там есть dlang-requests немного смахивающий на питоновский requests.

Впрочем для cpp гуглится гитхаб проекта cpr, кто-нибудь пробовал?
#158 #950950
>>950945

> система сокетов в QT лучше сделана.


То есть даже не стоит лезть в курл, а чинить кьют, я понял, спасибо.
Просто целый день убил на гуглеж всяких разных способов, нашел даже такое https://kaimi.io/2012/01/http-https-cpp-classes/
#159 #950952
>>950945

>В пиздоне заебись


Можно же склеить кусок кода питона с реквестами с остальным кодом, написанным на плюсах, верно? Или так ещё хуже будет?
950958
#160 #950958
>>950952
Можно вызывать код на пиздоне из крестов? Но опять же, это снизит возможности переноса, так как это потребует наличия питона на целевой машине. Но идея не плоха кстати.
950962
#161 #950962
>>950958
Питон можно скомпелять.
950974
#162 #950974
>>950962
Лол, действительно. Интересно, питон можно включить в бинарник?
Костыли-костылики. Но попробую. Если получится, и на скорости не скажется (а оно не скажется, благо парсинг в питоне быстр), то вообще пушка, такое-то прогрессивное программирование на крестах.
950979
#163 #950979
>>950974
Не знаю как пистон, но вышеупомянутый d можно попробовать слинковать - https://dlang.org/spec/cpp_interface.html
950982
#164 #950981
>>950945
Что ты там с этими сайтами делаешь, что тебе медленно? Тебе нужно не питон из С++ вызывать, а наоборот. Переписать на С++ медленный код и все.
950982
#165 #950982
>>950981

> Что ты там с этими сайтами делаешь, что тебе медленно?


Ну, например мне надо проверять большие объёмы текста на наличие слов из массива. Таких ключевых слов может быть 200 и 300. Каждый текст - около 30 слов. И таких текстов может быть сотни штук. И они обновляются раз в 10 минут.
Пиздон просто тихо умирает.

> Тебе нужно не питон из С++ вызывать, а наоборот.


Пиздос. То есть PyQt работает так? Всё не слава богу.
>>950979
Это опять в D встраивается C++ а не наоборот. А мне в QT надо встроить маленький кусок.
950991951041
#166 #950984
>>950898

>QSslSocket: cannot resolve TLSv1_2_server_method


У меня такая фигня была на винде, где нет openSSL.
Решилось установкой openssl 0.98 (1.+ верссии не работали!), dllки кинул в /system32.
Под RPI и на ебунте всё из коробки заебись было.
#167 #950991
>>950982
У тебя проблема скорее с алгоритмом, если у тебя там o(n*m), то неудивительно, что умирает. А по факту производительность у тебя скорее упрется в скорость интернета, чем в скорость поиска.
Но если прямо вот тебе нужен этот самый С++, то качаешь и парсишь все на питоном, скармливая С++ только нужное. Но скорее всего на питоне уже давно есть такой код.
950992
#168 #950992
>>950991
На питоне у меня уже и так всё написано, да. А вот как его к крестам теперь подключить - не понятно.

> У тебя проблема скорее с алгоритмом


Ну, у меня нет идей его изменения.
Смотри, я скачиваю большое количество маленьких статей. Мне нужно узнать, содержится ли в каждой статье хоть одно слово из списка. В списке куча ключевых слов, а с учетом особенностей русского языка - еще и куча форм этих слов. А каждые 20-30 минут еще и новые докачиваются.
Вот так и получается что питон умирает.
950995
#169 #950995
>>950992
Индексируй. Возьми статью, удали из нее все знаки препинания и приведи к lowercase, а затем отсортируй. Далее поиск у тебя будет уже не o(nm), где n - число слов в статье и m - число ключевых слов, а o(log(n)m).
Но по факту тебе нужно взять какой-нибудь уже написанный движок типа apache solr, или что там есть у питона свое.
951001
#170 #951001
>>950995
Ого, даже такое имеется. Чтож, спасибо, попрою в сторону уже написанных движков. Как это вообще верно называется? Парсер текста?
951016
100 Кб, 1442x591
#171 #951015
Майкрософт обезумел. Сумеешь ли ты совладать с ним?
951042951070
#172 #951016
>>951001
text search engine
#173 #951019
Как же бесит эта хуета с установками студии. В 90-е годы установка компиляторов проходила в 2 минуты. Сейчас эта тягомотина может занять сутки. Просто пиздец.

Ставил сейчас 2015 студию апдейт 2. С галкой C++. Эта дура не поставила компиляторы. Узнал об этом только, когда CMake не смог их найти. Стал проверять -- и правда нигде нет.

Ща буду переустанавливать. Почему они не могут научить своих индусов, чтобы инсталяторы просто копировали файлы, а делали миллион каких-то непонятных операций с системой, с реестром, с сетью, с аллахом? Пиздос.
10 Кб, 454x640
#174 #951020
Нажал удалить. Оно снова делает что-то непонятное. Аквайринг и апплайнинг нахуй.
#175 #951035
Походу нельзя поставить 2015 студию, если ты поставил 2017 RC студию. Ведь дауничи в майкрософте назвали 2017 RC, как 2015.10928xyu4o92u.beta.alpha.omega и инсталятор думает, что компиляторы C++ уже установлены и их не надо снова ставить. Как так можно писать программы в 2017 году? Я охуеваю.
6 Кб, 521x114
#176 #951036
Все что нужно знать о качестве продуктов мелкомягких. Установило 8 Гб всякого дерьма. Но компилятор не поставило. Осталось только угадать какая правильная последовательность деинсталяции студий. Чтобы не пришлось переустанавливать шиндовс, чтобы оно наконец-то заработало.
951726951731
#177 #951041
>>950982

> а не наоборот


По ссылке в том числе наоборот
#178 #951042
>>951015

> Создать проект


> C++


> Докачать компиляторы, библиотеки, sdk для winXP


И что?
#179 #951044
А можно ли дебажить dll, которая скомпилирована в 2010 студии находясь в 2015, чтобы еще были брекпоинты в исходном коде, которые я поставлю в 2015?

Или такой вариант: можно ли использовать 2015 студию только в качестве IDE, а компиляторы и линковщики использовать от 2010?
951071951074
#180 #951051
Что ж, разобрался в итоге с питоном и крестами:
Есть два стула. Писать скрипт и вызывать его, но большая ебля с конвертацией объектов, QString сначала в стринг а потом в питоний стринг придётся.
Либо же нашел вот такое, https://github.com/kayhayen/Nuitka
позволяет компилировать скрипты в сишный бинарник. Как его вызывать и передавать объекты пока не понял.
23 Кб, 833x789
#181 #951056
Что-то пошло не так со строкой. на массиве charov алгоритм сработал как надо. Подскажете?
951068
#182 #951068
>>951056
length - функция, а не поле
#183 #951070
>>951015

Ты хоть раз инсталятор открывал? "typical" - это кнопка в инсталяторе, можешь выбрать вообще всё.
#184 #951071
>>951044

Скорее всего ответы "да" и "да".
#185 #951074
>>951044
Не боишься написать в 15 студии код, который компилятор 10й не проглотит?
#186 #951075
>>950898

http://doc.qt.io/qt-5/opensslsupport.html

Нужен опенссл для твоей битности и твоего компилятора.
951078
#187 #951078
>>951075
qDebug()<<QSslSocket::supportsSsl();
Возвращает тру.
951079
#188 #951079
>>951078
А, это вообще не та хуйня, сори. Просто глазом зацепился, думал, что это говно говорит о том, включена ли поддержка SSL.
#189 #951095
Кароче, пасаны, можно ли как-нибудь обратиться к классу или переменной через другую переменную, т.е. написать имя этого класса в зависимости. Через дефайн может. Например, есть у нас 1 кнопка и 100 форм, в которые записывается результат нажатия кнопки. И вот, чтобы не писать в case 100 строк, нужно что-то вроде Form%i=GetResult().... Т.е. в зависимости от счётчика выбирается соответствующая форма. Надеюсь, понятно.
951189951216
#190 #951189
>>951095
Запихай в один массив указатели на них, хули тут думать.
951195
#191 #951195
>>951189
Ладно, так и сделаю. Просто может, какая-то фича есть, а я и не знаю о ней...
#192 #951216
>>951095
Кури паттерны всякие, судя по всему тебе подходит цепочка обязанностей, но я могу и ошибаться
7 Кб, 808x182
13 Кб, 919x507
#193 #951223
Не могу разобратсья с тем, как работает юникод. По идее же, точно также как и обычные строки - число на 4 байта, тоже есть номер. Но на деле ничего не работает, значения не совпадают с теми, что дают таблицы в интернете, ЧЯДНТ?
951229
#194 #951229
>>951223
cout выводит обычные символы, и возможно, utf-8. Для wchar нужен wcout и нужно еще локаль настроить.
951242
10668 Кб, Webm
#195 #951233
Я догуглился.
http://www.jecgonline.com/article/S0022-0736(09)00536-6/abstract
Не меньше минуты тупил в текст, пока до меня не дошло что это не тот Qt.
#196 #951234
Где можно скачать книгу "Как перестать говнокодить"?
951235
#197 #951235
>>951234
uml.org.cn/c++/pdf/DesignPatterns.pdf
951391
16 Кб, 884x424
#198 #951242
>>951229
Со строчками и их принципом разобрался, не понимаю как их выводить в wcout, если wcout сталкивается с неаскии символом, начиная с этого символа весь вывод пустотой заменяет, но винапи прекрасно все понимает. Проблема исключительно с wcout. Какую локаль настроить?
951243951265951309
#199 #951243
>>951242
Похоже что у тебя шиндовская командная строка не пропускает японскую кодировку. Попробуй код запустить на юниксе какой-нибудь, там с юникодом все в порядке, тут например http://cpp.sh/
951246
#200 #951246
>>951243
Да, не пропускает, даже пытался кандзи пихать в нее.
Конечно, это замечательно, что на никсе все будет работать, но меня интересует винда.
951254
#201 #951254
>>951246
Попробуй тогда подключить clocale и установить std::setlocale(LC_ALL, "en_US.UTF-8");
951258
13 Кб, 678x385
#202 #951258
>>951254
Сэйм
951259
#203 #951259
>>951258
Тогда так "ja_JP.UTF-8"
16 Кб, 815x475
#204 #951262
Сэйм. Там же 2^16 символов, какая разница какая имеено, прикол в том, что у меня даже en_US не прокает.
951267958976
91 Кб, 640x480
#205 #951264
Няши, где можно найти гуиды по OpenGl для qt? Особенно интересует 2д. Всё, что нашел - это чисто код на офф сайте, без пояснений. На ютубе только 2011 год, для qt 4. С тех пор всё поменялось.
951280
#206 #951265
>>951242

> Какую локаль


Попробуй td::setlocale(LC_ALL, "ja_JP");
Или попробуй перед выводом строки конвертнуть ее в utf-8
Или поищи какой-то винапи вызов
Если тебе не нужно изменять строки то лучше в utf-8 работать
951280
#207 #951267
>>951262
Тогда так делай std::wcout.imbue(std::locale("ja_jp.utf-8")); вместо setlocate
951280
42 Кб, 1277x521
#208 #951280
>>951267
Сэйм.
>>951265
Да хотелось бы изменять.
>>951264
В Qt своя механика реализации всего этого, свои подклассы для рисовки и прочего, я бы советовал учить все с нуля и работать напрямую с либами OpenGL.
От себя могу посоветовать типулю, который делает достаточно неплохие видосы по этому поводу https://www.youtube.com/channel/UCeQhZOvNKSBRU0Mdg7V44wA (я так понимаю тебе с нуля).
И книжку (Ginsburg D., Purnomo B. - OpenGL ES 3.0 Programming Guide - 2014), говорили что полезная, я не по графике выступаю, поэтому скачал и забил.
951286951289
#209 #951286
>>951280
Бля заебал со своим шиндоус говном, иди на яве короче пиши
951302
#210 #951289
>>951280
Спасибо. А если писать на чистом OpenGL то кроссплатформенность останется? И на сколько вообще сложно изучать это? Мне много не надо, чисто 2д и спрайты, как во втором варкафте. QT знаю хорошо, написано много программ, но в граффику вкатываюсь впервые.
951302
#211 #951302
>>951286
Сам на яве, блядь, пиши, дай мне консольный юникод оутпут. Я ебал все сорцы портировать в qt. Мне даже винапишный подойдет, главное, чтобы работал.

>>951289
OpenGL - либы, ты можешь их на много языков натянуть, хоть на ту же обоссную джаву, можешь сразу на андроед деплоить. Да, все кроссплатформенное, но это не значит, что любой код, написанный с помощью этих либ будет одинаково четко работать на разных девайсах, к примеру, то же разрешение экрана, сенсорное управление и прочее.
Qt это как детский вариант плюсов, все просто и почти так же быстро, он удобен, но немного отупляет.
И да, тебе придется им за лицензию отсыпать, если игру не только для своей мамы пишешь.
951312951315
#212 #951309
>>951242

В каком-то из тредов писал уже. >>931827 (OP)
951318951319
#213 #951312
>>951302
Тебе уже дали, сам виноват что на поделие от m$совта запускаешь, твоя головная боль
#214 #951315
>>951302

> можешь сразу на андроед


Не нужно, только пека и юниксы.

> Qt это как детский вариант плюсов


И не поспоришь. Но, нормального гуя для приложений я кроме как qt не нашел, а тем более кроссплатформенного.
Чтож, спасибо, буду пытаться вкатываться, надеюсь opengl нормально работает с qt.
951325
#215 #951318
#216 #951319
>>951309
Опача, вот за это спс.
#217 #951325
>>951315
Неее, старик, с такими познаниями я тебе настоятельно советую посмотреть те видосы, читать книжки про опенгл и так далее, поверь, ты еще 300 раз пересмотришь свои взгляды на геймдев.
Для начала я бы тебе посоветовал узнать ответ на парочку вопросов
1 чем оконное гуи отличается от рисования квадратиков и как бы отличалась прога, если бы синюю рамку и кнопочки ты нарисовал через DrawRect какой-нибудь графлибы
2 в чем разница directx от opengl на винде, это ж либы, значит либы тоже дергают какие-то функции, вот в чем разница между функциями которые они дергают
как узнаешь ответы на эти вопросы, все станет яснее
951332
#218 #951332
>>951325
Ну, что пересмотрю это не сомневаюсь, несколько лет назад в начале изучения крестов пытался вкотиться в гл, охуел от сотен функций.
А ответы на вопросы я и так (я думаю) знаю:
1 - qt всё рисует сам, все элементы уже готовы их надо просто поставить, а в огл всё рисовать надо самому. Поэтому я буду использовать qt только для логики, просто консольное приложение с огл.
2 - Ну, по идее, и тот и тот дергает низкоуровневые драйвера. Только директх для винды, а в огл есть разная реализация в зависимости от платформы
951337951368
#219 #951337
>>951332
Я имел ввиду именно низкоуровневые вопросы, именно как кто дергает "низкоуровневые драйвера". Вот разберись с этим, много нового узнаешь, я съебал.
#220 #951368
>>951332
Наследуешься от QOpenGLWidget и рисуешь в методе void QOpenGLWidget::paintGL().
В этом методе получаешь контекст рендергина при помощи одноименной функции context() и затем дескриптор для работы с OpenGL функциями в зависимости от всратости желаемого OpenGL - functions() или extraFunctions().
Ну и соответственно добавишь таймер на отрисовку контента.
#221 #951391
>>951235
Годнота, ушёл обмазываться
#222 #951410
Здорово пупсеки

В качестве нетипового параметра шаблона могут быть использованы указатели на объекты.

Вопрос: почему этот объект должен иметь статическое время жизни?
#223 #951432
>>951410

Похоже на домашку.
951542951544
#224 #951433
>>951410

Ответ: не должен.
951659
#225 #951542
>>951432

Липман советовал именно так, ему я больше немного верю
951590
#226 #951544
>>951432
А твоя рожа на какашку

АХАХАХАХАХА
#227 #951590
>>951542

Что там тебе ещё Липман нашептал? Запретил использовать unique_ptr?
#228 #951659
>>951433
Пруф
951746
#229 #951660
>>951410
А головой подумать?
#230 #951724
>>947658
нет
#231 #951726
>>951036

Если руки из жопы растут, что тут ещё можно сказать?
#232 #951731
>>951036
Попробуй поставить GCC, начиная с Windows 7 он поддерживается (пункт "Подсистема Linux" в виндовых компонентах).
#233 #951746
>>951659

Стандарт открой и почитай.
#234 #951868
Пробовал кто-нибудь модули на вижле? Можно пользоваться?
#235 #951870
А можно ли реюзать поток std::thread?

Например я хочу, просто создать поток. А потом по очереди скормить ему несколько функций или одну функцию с разными переменными. Или это так не работает?
#236 #951872
>>951870
Нельзя. Скормить функцию ты можешь через конструктор -> по одному объекту на функцию выходит.
#237 #951884
>>951870
Что именно тебе нужно, чтобы поток делал. Объясни вразумительнее.
951898
#238 #951898
>>951884
Дергал данны из массива, обрабатывал их, писал результат в другой масив.
951907952129
#239 #951903
>>951870
Тебе нужно, чтобы функции последовательно или параллельно выполнялись?
В любом случае ты можешь создать функцию, которая будет плодить эти потоки, и вызывать её в отдельном потоке или просто так.
Если нужно последовательное выполнение, ты создаешь поток; ждёшь, пока он выполнится (join); повторяешь.
Если нужно параллельное выполнение, то придётся или хранить массив потоков и каждый ждать. Если вдруг ждать не нужно, то можно плодить потоки, как для последовательного случая, но при этом говорить, что тебе всё равно, когда закончится поток (detach).
При использовании потоков обязательно вызывать join или detach, иначе твоя прога рискует улететь по std::terminate.

Вся информация взята из гугла.
#240 #951904
>>951870
Просто так нельзя. То что ты хочешь делают через пул потоков (thread pool). Стандартной реализации нет, нужно или самому делать или тащить откуда-то. В бусте, например, вроде как есть.
#241 #951907
>>951898
Что за данные? Это большая структура, или диапазон данных этого самого массива, или что?
Сделай пул потоков.
#242 #951912
>>951870
Также можно использовать std::async. В MSVC в реализации используется пул потоков.
951967
#243 #951967
>>951912
Лол. Я другой анон, но пришёл сюда с вопросом по std::async.
Just in time.
Вопрос следующий.
Есть некоторые данные, прилетающие через udp.
Данные из пакета мне надо скармливать функции и работать дальше. Что там делает дальше функция - не важно. Возвращаемое в основное тело программы значение - неважно. Единственный момент - количество прилетаемых данных разное, поэтому, теоретически, в некоторый момент вызов функции может идти в тот момент, пока она ещё работает с предыдущим набором данных.

Проблема, в общем-то, такая.
Если я просто обращаюсь к функции, то всё становится до момента, пока она не отработает и не выдаст результат. Что логично.

Т.е. из main() я вызываю "fastParse(recvData);"
В fastParse() у меня есть вывод в консоль для отсмотра поступления данных в принципе:
printf("%s\n", recvData);
while (true) {
b++;
printf("%i\n",b);
}

Т.е. при обращении к функции вижу факт поступления данных, а потом бесконечный поток увеличивающихся значений.
При повторном обращении поступления новых данных не вижу (они не выводятся среди увеличивающегося потока значений).

Если я делаю через
std::async(fastParse, recvData);
то я вообще не вижу никакого отклика от функции. Что не так.
В примерах (типа http://www.cplusplus.com/reference/future/async/ ) есть ожидание данных через std::future, но мне эти данные, по большому счёту, получать не надо, поэтому в future необходимости нет.

Или async не создаёт и не распараллеливает дополнительные экземпляры функции, поэтому мне надо смотреть нечто другое (потоки?)?
Что я делаю не так?
#243 #951967
>>951912
Лол. Я другой анон, но пришёл сюда с вопросом по std::async.
Just in time.
Вопрос следующий.
Есть некоторые данные, прилетающие через udp.
Данные из пакета мне надо скармливать функции и работать дальше. Что там делает дальше функция - не важно. Возвращаемое в основное тело программы значение - неважно. Единственный момент - количество прилетаемых данных разное, поэтому, теоретически, в некоторый момент вызов функции может идти в тот момент, пока она ещё работает с предыдущим набором данных.

Проблема, в общем-то, такая.
Если я просто обращаюсь к функции, то всё становится до момента, пока она не отработает и не выдаст результат. Что логично.

Т.е. из main() я вызываю "fastParse(recvData);"
В fastParse() у меня есть вывод в консоль для отсмотра поступления данных в принципе:
printf("%s\n", recvData);
while (true) {
b++;
printf("%i\n",b);
}

Т.е. при обращении к функции вижу факт поступления данных, а потом бесконечный поток увеличивающихся значений.
При повторном обращении поступления новых данных не вижу (они не выводятся среди увеличивающегося потока значений).

Если я делаю через
std::async(fastParse, recvData);
то я вообще не вижу никакого отклика от функции. Что не так.
В примерах (типа http://www.cplusplus.com/reference/future/async/ ) есть ожидание данных через std::future, но мне эти данные, по большому счёту, получать не надо, поэтому в future необходимости нет.

Или async не создаёт и не распараллеливает дополнительные экземпляры функции, поэтому мне надо смотреть нечто другое (потоки?)?
Что я делаю не так?
951980951982
#244 #951980
>>951967

> поэтому в future необходимости нет


Если я правильно понял то в этом твоя проблема. В future необходимости нет, но async его возращает, и так как это временный объект то future сразу же удаляется, тоесть вызывается его деструктор. А особенность деструктора future в том что он блочит тред в котором вызвался пока не будет завершен связаный с ним async. Тоесть вызов std::async(fastParse, recvData); фактически синхронный так как деструктор future блочит тред пока не выполнится async, а он у тебя бесконечный. Потопробуй сохранять куда-то future, при чем так чтобы он не удалялся до самого завершения async.
952005952009
#245 #951981
Пссс, аноны, а можно как-то в массив запихнуть слова, а потом вытаскивать их из него?
951984951985
#246 #951982
>>951967
Попробуй запускать так:
std::async(std::launch::async, fastParse, recvData)
952005952009
#248 #951985
951995
#249 #951994
>>951984
Контейнеры, хуё-моё, тааак падажжи. Можешь пример кода дать?
#250 #951995
>>951985
И по какому принципу? Пример кода плез.
С меня как обычно нихуя
951996
#251 #951996
952010
#252 #952005
>>951982
Не, ведёт себя внешне так же как без async.
>>951980
Да, подозреваю, что у меня без future (в случае с launch всё равно подразумевается) происходит блокировка и async не такой уж и асинхронный в этот момент в том смысле, в каком я это понимаю.

Всё-таки накидал пока через std::thread с детачем. Выглядит гораздо ближе к тому, что я хочу видеть (с передачей аргуметов косяк - сам вызов происходит, но передаются пустые значения; но это уже разгребу - проблемой не выглядит).
А сохранять future - я боюсь, что это повлияет на производительность. Или нет, если возвращается, например, NULL? С этой позиции, как я понимаю, детачнутый поток освободит ресурсы сразу по завершению? Понятное дело, что в моём примере этого никогда не произойдёт из-за while(true)?
952020
#253 #952009
>>951980
>>951982
И да. Забыл. Спасибо.
23 Кб, 318x319
#254 #952010
>>951996
Ну, в своём первоначальном вопросе я имел в виду кое-что другое: имеется массив со словами. И при каком-нибудь условии, вытаскивается какое-то конкретное слово, а не все.
#255 #952012
>>952010
Это в каком таком случае?
952015
#256 #952013
952018
#257 #952015
>>952012
Ну, например, объявляем переменную
int x = 1 + rand() % 30;
Она будет в диапазоне от 1 до 30. И при определённом значении переменной будет выводиться нужное слово из массива.
Я знаю, что можно сделать просто через switch, но будет много говнокода. А так хочется узнать, как это будет выглядеть при работе с массивом.
#258 #952018
>>952013
Спасибо
#259 #952019
>>952010
Так тебе же всё равно надо или позицию этого слова знать, или перебирать все элементы.
Во втором случае http://ru.cppreference.com/w/cpp/container верно, остаётся только выбрать самый оптимальный вариант перебора для конкретного случая.
http://www.cplusplus.com/reference/array/array/
В разделе member functions есть примеры к каждой конкретной функции.
Глянул быстро, на cppreference тоже есть. Правда я им не пользуюсь, не знаю, насколько много. на сиплюсплюс - точно много. Только, кажется, там русского нет (тут мне пофиг).
#260 #952020
>>952005
На производительность не повлияет, future же конструируется в любом случае. Это если бы был вариант асинка без возрата - он был бы эффективнее. А так ты теряешь только десяток байт на хранение future. И то не факт - под временный объект где-то выделяется память, если на стеке вызывающей функции, то так так ты вызываешь из мейна, то тратить память для хранения future придется в любом случае. Но для твоего варианта тред лучше. Профит асинка только в надежде что его реализация использует пул потоков, а так как у тебя бесконечная задача то в пуле нет смысла.
952025
#261 #952025
>>952020
Спасибо ещё раз.
45 Кб, 1183x820
#262 #952027
Как в QAbstractItemListModel добавить несколько полей сверху? Нужно просто текст-число, все уже перепробовал.
#263 #952028
>>952027
Сформулируй задачу нормально. Это не тред про Qt.
952029
#264 #952029
>>952028
Задача про формирование интерфейса Qt, в том то и дело.
952032
#265 #952032
>>952029
Нарисуй хотя бы, что ты хочешь получить.
952034
18 Кб, 1491x642
#266 #952034
952037
#267 #952037
952106
#268 #952039
>>952027
Используй сигналы beginInsertRows и endInsertRows. Первый вызываешь перед добавлением элементов при этом передаешь ему два индекса - места, куда ты будешь запихивать свои элементы, второй вызываешь при окончании добавления.
952106
#269 #952066
>>952027
CLion?
#270 #952072
>>947007 (OP)
Как потребовать от шаблона быть InputIterator-ом?
В псевдокоде это выглядело бы что-то вроде "template<InputIterator<T>>".
На С# было бы что-то вроде "Method<IEnumerable<T>>".
952089
#271 #952089
>>952072
От шаблона чего, если функции, то можешь SFINAE применить. Или, например:

template<typename T>
void some_func(InputIterator<T> &iterator);
952099
#272 #952099
>>952089
http://ideone.com/hvVLaw
Вот тут посмотри, все просто, в принципе
#273 #952101
>>951870
Я использовал continuous таски из TBB они не блокируют текщий тред. Единственное важное условие результат вычислений должен быть соответственно синхронизироваться с помощью атомиков, либо мьютексов.
#274 #952106
>>952037
Неа, ничерта не работает, список как был таким, так и остался, перерыл хуеву кучу материала.
Возможно я не ту модель наследую, может QAbstractListModel не позволяет сделать несколько колонок, разделенных табуляцией?
Посмотрел в примерах, там такого разделения как я хочу нет.

>>952039
Понятия не имею как сигналы могут помочь, если у меня сам объект неправильно устроен.
952124952130
#275 #952124
>>952106
Ну-ка кинь скрин того, что получилось.
952126
#276 #952126
>>952124
Да нихуя не получилось, пытался запилить QAbstractItemModel там примеры хуй пойми что, ничего не понятно, ни как заполнять, ни про индексы, все данные идут из дефолтных функций клюта, на хуя я вертел такое гуи. Сделаю через QlistView, похуй, не будет колонок.
#277 #952129
>>951870 >>951898 кун
Всем спасибо. Сделал втупую: внутри потока в считываются и записываются данные.
Сначала джоинил его в деструкторе класа, но вектор резукльтатов вечно был пуст. Перенес джоин сразу после потока и все стало. Где можно подробно почитать чому так?
#278 #952130
>>952106
Может тебе QAbstractTableModel?
952145
#279 #952145
>>952130
Думаю да, подошел бы, но после нескольих часов дроча их документации я уже не настроен на новые технологии.
952147
#280 #952147
>>952145
Осиль же.
952168
14 Кб, 306x506
#281 #952168
>>952147
Да нет, концептуально все же QAbstractListModel подошел
952180
#282 #952180
>>952168
Так ты осилил? Тогда молодец.
#283 #952203
Чот в ideone код не вставляется
#284 #952204
Поэтому вот, я запилил

//Бредогенератор

#include <iostream>

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
setlocale(LC_ALL, "ru_RU.UTF-8");
setlocale(LC_ALL, "");
unsigned rand_value = 11;
srand(rand_value); //рандомизация генератора случайных чисел
int a;
int x;
start:
x = 1 + rand() % 30;
switch (x) {
case 1:
cout << "Неизвестный ";
break;
case 2:
cout << "Президент Гондураса ";
break;
case 3:
cout << "Пенсионер ";
break;
case 4:
cout << "Милиционер ";
break;
case 5:
cout << "Пингвин-убийца ";
break;
case 6:
cout << "Моряк-гомосексуалист ";
break;
case 7:
cout << "Анатолий Вассерман ";
break;
case 8:
cout << "Евгений Петросян ";
break;
case 9:
cout << "Известный писатель ";
break;
case 10:
cout << "Одноногий человек ";
break;
case 11:
cout << "Артемий Лебедев ";
break;
case 12:
cout << "89-летний зоофил ";
break;
case 13:
cout << "Афроамериканец ";
break;
case 14:
cout << "Владимир Путин ";
break;
case 15:
cout << "Владелец известной компании ";
break;
case 16:
cout << "Пьяный лётчик ";
break;
case 17:
cout << "Билл Гейтс ";
break;
case 18:
cout << "Стив Джобс ";
break;
case 19:
cout << "Китайский рабочий ";
break;
case 20:
cout << "Сисадмин ";
break;
case 21:
cout << "Строитель ";
break;
case 22:
cout << "Министр обороны ";
break;
case 23:
cout << "Чак Норрис ";
break;
case 24:
cout << "Алкоголик ";
break;
case 25:
cout << "Наркоман ";
break;
case 26:
cout << "Знаменитый блоггер ";
break;
case 27:
cout << "Маньяк ";
break;
case 28:
cout << "Кондуктор ";
break;
case 29:
cout << "Водитель маршрутки ";
break;
case 30:
cout << "Хакер ";
break;
}

x = 1 + rand() % 26;
switch (x) {
case 1:
cout << "убил ";
break;
case 2:
cout << "зарезал ";
break;
case 3:
cout << "изнасиловал ";
break;
case 4:
cout << "застрелил ";
break;
case 5:
cout << "родил ";
break;
case 6:
cout << "послал на хуй ";
break;
case 7:
cout << "повесил на столбе ";
break;
case 8:
cout << "превратился в ";
break;
case 9:
cout << "убил и съел ";
break;
case 10:
cout << "подал в суд на ";
break;
case 11:
cout << "съел ";
break;
case 12:
cout << "предал анафеме ";
break;
case 13:
cout << "снялся в порнофильме про ";
break;
case 14:
cout << "купил себе ";
break;
case 15:
cout << "обоссал ";
break;
case 16:
cout << "выкакал ";
break;
case 17:
cout << "покусал ";
break;
case 18:
cout << "забил ногами ";
break;
case 19:
cout << "разбил голову об ";
break;
case 20:
cout << "выкинул из окна ";
break;
case 21:
cout << "утопил в унитазе ";
break;
case 22:
cout << "бросил под поезд ";
break;
case 23:
cout << "снял на видео ";
break;
case 24:
cout << "влюбился в ";
break;
case 25:
cout << "сбил на автомобиле ";
break;
case 26:
cout << "переехал ";
break;
}

x = 1 + rand() % 26;
switch (x) {
case 1:
cout << "старушку ";
break;
case 2:
cout << "НЛО ";
break;
case 3:
cout << "жену ";
break;
case 4:
cout << "депутата ";
break;
case 5:
cout << "пенсионера ";
break;
case 6:
cout << "резиновую уточку ";
break;
case 7:
cout << "мухомор ";
break;
case 8:
cout << "человека-паука ";
break;
case 9:
cout << "себя ";
break;
case 10:
cout << "Новодворскую ";
break;
case 11:
cout << "Тимошенко ";
break;
case 12:
cout << "ребёнка ";
break;
case 13:
cout << "президента ";
break;
case 14:
cout << "школьника ";
break;
case 15:
cout << "8-летнюю девочку ";
break;
case 16:
cout << "друга ";
break;
case 17:
cout << "батон колбасы ";
break;
case 18:
cout << "собаку ";
break;
case 19:
cout << "кошку ";
break;
case 20:
cout << "хомячка ";
break;
case 21:
cout << "клизму ";
break;
case 22:
cout << "новенький iPhone ";
break;
case 23:
cout << "эльфа ";
break;
case 24:
cout << "таракана ";
break;
case 25:
cout << "компьютерную мышь ";
break;
case 26:
cout << "бутылку водки";
break;
}

x = 1 + rand() % 18;
switch (x) {
case 1:
cout << "на почве ";
break;
case 2:
cout << "из-за ";
break;
case 3:
cout << "в бытовом споре по поводу ";
break;
case 4:
cout << "в борьбе за независимость ";
break;
case 5:
cout << "в результате воздействия ";
break;
case 6:
cout << "под действием ";
break;
case 7:
cout << "в состоянии ";
break;
case 8:
cout << "под видом ";
break;
case 9:
cout << "на виду у любителей ";
break;
case 10:
cout << "из-за недостатка ";
break;
case 11:
cout << "в отместку за расстрел ";
break;
case 12:
cout << "от переизбытка ";
break;
case 13:
cout << "устав от ";
break;
case 14:
cout << "опасаясь ";
break;
case 15:
cout << "угнав вагон ";
break;
case 16:
cout << "доказывая вред ";
break;
case 17:
cout << "при поддержке ";
break;
case 18:
cout << "с помощью ";
break;
}

x = 1 + rand() % 34;
switch (x) {
case 1:
cout << "перхоти";
break;
case 2:
cout << "Америки";
break;
case 3:
cout << "гнилых пельменей";
break;
case 4:
cout << "интернетов";
break;
case 5:
cout << "растишки";
break;
case 6:
cout << "наркотиков";
break;
case 7:
cout << "алкоголя";
break;
case 8:
cout << "инопланетных излучений";
break;
case 9:
cout << "лесных эльфов";
break;
case 10:
cout << "педофилов";
break;
case 11:
cout << "ФСБ";
break;
case 12:
cout << "импотенции";
break;
case 13:
cout << "секса";
break;
case 14:
cout << "котлет";
break;
case 15:
cout << "комаров";
break;
case 16:
cout << "черепашек-ниндзя";
break;
case 17:
cout << "живого журнала";
break;
case 18:
cout << "порнографии";
break;
case 19:
cout << "денег";
break;
case 20:
cout << "негров";
break;
case 21:
cout << "местного детского сада";
break;
case 22:
cout << "анального секса";
break;
case 23:
cout << "соседнего макдональдса";
break;
case 24:
cout << "всего";
break;
case 25:
cout << "ништяков";
break;
case 26:
cout << "своего интернет-провайдера";
break;
case 27:
cout << "аниме";
break;
case 28:
cout << "онлайн игр";
break;
case 29:
cout << "онанизма";
break;
case 30:
cout << "операционной системы Linux";
break;
case 31:
cout << "ночного клуба";
break;
case 32:
cout << "толкиенистов";
break;
case 33:
cout << "шаурмы";
break;
case 34:
cout << "хакеров";
break;
}

cout << "." << endl;

cout << "Хотите ещё? Если да, то введите 1. Для выхода из программы введите любое другое число." << endl;
error:
cin >> a;
switch (a) {
case 1:
goto start;
default:
exit;
}
system("pause");
return 0;
}
#284 #952204
Поэтому вот, я запилил

//Бредогенератор

#include <iostream>

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
setlocale(LC_ALL, "ru_RU.UTF-8");
setlocale(LC_ALL, "");
unsigned rand_value = 11;
srand(rand_value); //рандомизация генератора случайных чисел
int a;
int x;
start:
x = 1 + rand() % 30;
switch (x) {
case 1:
cout << "Неизвестный ";
break;
case 2:
cout << "Президент Гондураса ";
break;
case 3:
cout << "Пенсионер ";
break;
case 4:
cout << "Милиционер ";
break;
case 5:
cout << "Пингвин-убийца ";
break;
case 6:
cout << "Моряк-гомосексуалист ";
break;
case 7:
cout << "Анатолий Вассерман ";
break;
case 8:
cout << "Евгений Петросян ";
break;
case 9:
cout << "Известный писатель ";
break;
case 10:
cout << "Одноногий человек ";
break;
case 11:
cout << "Артемий Лебедев ";
break;
case 12:
cout << "89-летний зоофил ";
break;
case 13:
cout << "Афроамериканец ";
break;
case 14:
cout << "Владимир Путин ";
break;
case 15:
cout << "Владелец известной компании ";
break;
case 16:
cout << "Пьяный лётчик ";
break;
case 17:
cout << "Билл Гейтс ";
break;
case 18:
cout << "Стив Джобс ";
break;
case 19:
cout << "Китайский рабочий ";
break;
case 20:
cout << "Сисадмин ";
break;
case 21:
cout << "Строитель ";
break;
case 22:
cout << "Министр обороны ";
break;
case 23:
cout << "Чак Норрис ";
break;
case 24:
cout << "Алкоголик ";
break;
case 25:
cout << "Наркоман ";
break;
case 26:
cout << "Знаменитый блоггер ";
break;
case 27:
cout << "Маньяк ";
break;
case 28:
cout << "Кондуктор ";
break;
case 29:
cout << "Водитель маршрутки ";
break;
case 30:
cout << "Хакер ";
break;
}

x = 1 + rand() % 26;
switch (x) {
case 1:
cout << "убил ";
break;
case 2:
cout << "зарезал ";
break;
case 3:
cout << "изнасиловал ";
break;
case 4:
cout << "застрелил ";
break;
case 5:
cout << "родил ";
break;
case 6:
cout << "послал на хуй ";
break;
case 7:
cout << "повесил на столбе ";
break;
case 8:
cout << "превратился в ";
break;
case 9:
cout << "убил и съел ";
break;
case 10:
cout << "подал в суд на ";
break;
case 11:
cout << "съел ";
break;
case 12:
cout << "предал анафеме ";
break;
case 13:
cout << "снялся в порнофильме про ";
break;
case 14:
cout << "купил себе ";
break;
case 15:
cout << "обоссал ";
break;
case 16:
cout << "выкакал ";
break;
case 17:
cout << "покусал ";
break;
case 18:
cout << "забил ногами ";
break;
case 19:
cout << "разбил голову об ";
break;
case 20:
cout << "выкинул из окна ";
break;
case 21:
cout << "утопил в унитазе ";
break;
case 22:
cout << "бросил под поезд ";
break;
case 23:
cout << "снял на видео ";
break;
case 24:
cout << "влюбился в ";
break;
case 25:
cout << "сбил на автомобиле ";
break;
case 26:
cout << "переехал ";
break;
}

x = 1 + rand() % 26;
switch (x) {
case 1:
cout << "старушку ";
break;
case 2:
cout << "НЛО ";
break;
case 3:
cout << "жену ";
break;
case 4:
cout << "депутата ";
break;
case 5:
cout << "пенсионера ";
break;
case 6:
cout << "резиновую уточку ";
break;
case 7:
cout << "мухомор ";
break;
case 8:
cout << "человека-паука ";
break;
case 9:
cout << "себя ";
break;
case 10:
cout << "Новодворскую ";
break;
case 11:
cout << "Тимошенко ";
break;
case 12:
cout << "ребёнка ";
break;
case 13:
cout << "президента ";
break;
case 14:
cout << "школьника ";
break;
case 15:
cout << "8-летнюю девочку ";
break;
case 16:
cout << "друга ";
break;
case 17:
cout << "батон колбасы ";
break;
case 18:
cout << "собаку ";
break;
case 19:
cout << "кошку ";
break;
case 20:
cout << "хомячка ";
break;
case 21:
cout << "клизму ";
break;
case 22:
cout << "новенький iPhone ";
break;
case 23:
cout << "эльфа ";
break;
case 24:
cout << "таракана ";
break;
case 25:
cout << "компьютерную мышь ";
break;
case 26:
cout << "бутылку водки";
break;
}

x = 1 + rand() % 18;
switch (x) {
case 1:
cout << "на почве ";
break;
case 2:
cout << "из-за ";
break;
case 3:
cout << "в бытовом споре по поводу ";
break;
case 4:
cout << "в борьбе за независимость ";
break;
case 5:
cout << "в результате воздействия ";
break;
case 6:
cout << "под действием ";
break;
case 7:
cout << "в состоянии ";
break;
case 8:
cout << "под видом ";
break;
case 9:
cout << "на виду у любителей ";
break;
case 10:
cout << "из-за недостатка ";
break;
case 11:
cout << "в отместку за расстрел ";
break;
case 12:
cout << "от переизбытка ";
break;
case 13:
cout << "устав от ";
break;
case 14:
cout << "опасаясь ";
break;
case 15:
cout << "угнав вагон ";
break;
case 16:
cout << "доказывая вред ";
break;
case 17:
cout << "при поддержке ";
break;
case 18:
cout << "с помощью ";
break;
}

x = 1 + rand() % 34;
switch (x) {
case 1:
cout << "перхоти";
break;
case 2:
cout << "Америки";
break;
case 3:
cout << "гнилых пельменей";
break;
case 4:
cout << "интернетов";
break;
case 5:
cout << "растишки";
break;
case 6:
cout << "наркотиков";
break;
case 7:
cout << "алкоголя";
break;
case 8:
cout << "инопланетных излучений";
break;
case 9:
cout << "лесных эльфов";
break;
case 10:
cout << "педофилов";
break;
case 11:
cout << "ФСБ";
break;
case 12:
cout << "импотенции";
break;
case 13:
cout << "секса";
break;
case 14:
cout << "котлет";
break;
case 15:
cout << "комаров";
break;
case 16:
cout << "черепашек-ниндзя";
break;
case 17:
cout << "живого журнала";
break;
case 18:
cout << "порнографии";
break;
case 19:
cout << "денег";
break;
case 20:
cout << "негров";
break;
case 21:
cout << "местного детского сада";
break;
case 22:
cout << "анального секса";
break;
case 23:
cout << "соседнего макдональдса";
break;
case 24:
cout << "всего";
break;
case 25:
cout << "ништяков";
break;
case 26:
cout << "своего интернет-провайдера";
break;
case 27:
cout << "аниме";
break;
case 28:
cout << "онлайн игр";
break;
case 29:
cout << "онанизма";
break;
case 30:
cout << "операционной системы Linux";
break;
case 31:
cout << "ночного клуба";
break;
case 32:
cout << "толкиенистов";
break;
case 33:
cout << "шаурмы";
break;
case 34:
cout << "хакеров";
break;
}

cout << "." << endl;

cout << "Хотите ещё? Если да, то введите 1. Для выхода из программы введите любое другое число." << endl;
error:
cin >> a;
switch (a) {
case 1:
goto start;
default:
exit;
}
system("pause");
return 0;
}
952205952339
#285 #952205
>>952204
Блядь, табуляция
#286 #952206
>>947007 (OP)
Тупой вопрос, но все же.
Если я создам вектор массивов, когда будет вызван деструктор вектора, он корректно освободит память или как? Т.е. вызовет delete[] для своих членов. В свою очередь если он корректно освобождает память, то как он это делает? Допустим я пишу свои контейнер, как мне реализовать такой умный деструктор?
952210952224
#287 #952210
>>952206
А если я создам вектор указателей на void, как он их будет освобождать? Никак? Или как-то?
Допустим я под voidPtr храню массив хуйпоймичего, логично, что вектор не знает, как освободить память, допустим я сам удалю содержимое, но у вектора останется указатель и если он такие вызовет delete или delete[] то это приведет к хуете. Как в таком случае корректно работать с вектором?
952225952481
#288 #952224
>>952206
Массив - по сути просто указатель на первый элемент массива (вернее, на нулевой)
Указатель - просто число
Соответственно, никаких деструкторов вызвано не будет, потому что у чисел их нет
#289 #952225
>>952210

У указателя нет деструктора. Чтобы освобождалась память, нужен unique_ptr (или другие).

Запихнуть массивы в вектор ты не можешь, зато можешь сделать вложенные векторы.

Если нет информации о типе объекта, разобрать его ты не сможешь.
#290 #952230
Есть какие годные материалы о том, как с++ тестировать?
#291 #952254
Допустим, у меня есть шаблонный класс Array без конструктора по умолчанию, а только с конструктором с одним аргументом. Можно ли создать Array из Array'ев?

Типо такого: Array< Array<int>(10) > a(10); // попытка создать массив размера 10x10
#292 #952260
>>952027
Там стандартные заголовки же есть
http://doc.qt.io/qt-4.8/qstandarditemmodel.html#setHorizontalHeaderLabels
#293 #952264
>>952254
Или единственный варик - это создавать массив указателей и в цикле их заполнять?
952267
#294 #952267
>>952264
for (int i = 0; i < a4.size(); ++i)
{
a4 = new Array<int>(10, 3);
}

Такой варик норм, но тогда не работает индексация массива с []: вместо a4[j] приходится писать (*a4)[j]
Можно как-то задавать поведение для массива в зависимости от типа? Я имею ввиду, в случае с типом Т для индексации использовать один метод, а для указателя на этот тип - другой?
952281
#295 #952281
>>952267
Займись чем-нибудь полезным и не пиши никогда своих контейнеров пока у тебя не будет хотя бы пары лет опыта.
952290
#296 #952290
>>952281
Спасибо за ответ, последую твоему совету
иди нахуй, уебок. Нехуй сказать, а все равно надо же что-то спиздануть. Откуда вы блять беретесь
#297 #952304
>>952254

То, что у него нет конструктора по-умолчанию - лично твои проблемы, классу Array, как таковому, вообще ничего не нужно.

Многомерность можешь сделать через переменное количество аргументов и через рекурсивный вызов конструктора.
#298 #952305
>>952254

А ещё многомерность можно сделать через алокацию ОДНОГО блока памяти и через перегруженый оператор [], который вычисляет оффсет, без рекурсии.
952321
#299 #952321
>>952305

>через перегруженый оператор []


Как его перегрузить, если он принимает один аргумент - int(или size_t)? Ну точнее, перегрузить можно, но тогда это будет не канонический вызов a

>То, что у него нет конструктора по-умолчанию - лично твои проблемы


Я в курсе

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


Нихуя не понял. Дай ссылку на реализацию похожего(ну или объясни поподробнее)
952470
#300 #952339
>>952204
Локаль для cout и устанавливается через imbue.
Ебанутые свитчи вместо того, чтобы использовать массив строк.
Ебанутые константы.
GOTO вместо использования while / do-while
953016
293 Кб, 531x403
#301 #952457
Привет, я хотел бы поинтересоваться
Используете ли вы Boost? Если да, то какие фичи\библиотеки? Какие, на ваш взгляд, самые полезные\популярные?
ВОООТ.. Я сам бы хотел в него вкатиться со всей силы...

>В ШАПКЕ ->


>Дэвид Вандевурд и Николаи ДжоссатисШаблоны C++. Справочник разработчика2003После прочтения этой книги тебя не приведут в ужас даже исходники boost::MPL


Кто читал, так ли это? Стоит ли читать эту книгу for learning boost?
Заранее спасибо
952778954149966594
#302 #952470
>>952321

>Как его перегрузить, если он принимает один аргумент - int(или size_t)?



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

>Нихуя не понял. Дай ссылку на реализацию похожего(ну или объясни поподробнее)



Я тоже нихуя не понял. Собственно, если ты правильно напишешь класс, то

Array< Array<int>(10) > a(10);

и есть рекурсия, о которой я думал, и я не вижу препятсивй для этого.

>Можно ли создать Array из Array'ев?



Да.
952498
#303 #952472
>>952254

>Array< Array<int>(10) > a(10);


БЛЁ, есть же Matrix<>
#304 #952481
>>952210

> Как в таком случае корректно работать с вектором


Смарт поинтеры.
#305 #952498
>>952470

>и есть рекурсия, о которой я думал, и я не вижу препятсивй для этого.


Когда я передаю в качестве аргумента шаблону хуйню типо Array<int>(10), компилятор выдает ошибку о том, что это нихера не тип, а объект класса: template argument for template type parameter must be a type

>БЛЁ, есть же Matrix<>


Я в курсе, это мой пердолинг
952712
#306 #952712
>>952498

>Когда я передаю в качестве аргумента шаблону хуйню типо Array<int>(10), компилятор выдает ошибку о том, что это нихера не тип, а объект класса: template argument for template type parameter must be a type



Я на самом деле неопытен в плюсах, поэтому не заметил эту ошибку.

У тебя есть два варианта объявления массива:
- ты задаёшь размерность массива с помощью вложенных аргументов, а потом методом (который будет рекурсивно ресайзить подмассивы) ресайзишь его.
- ты задаёшь размерность массива аргументом темплейта, а размеры - туплой.

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

В первом случае ты сможешь использовать подмассивы независимо, во втором случае тебе нужен плоский массив с соответствующим образом перегруженным оператором [], и разделить его на подмассивы будет посложнее.
#307 #952777
Про туплу я зря сказал, это не совсем то. Чтобы проверять соответствие списка размеров размерности нужен набор чисел заданной длины вида huynya<int,3>(3,4,5), но для этого нужно сделать так, чтобы конструктор хуйни принимал нужное число аргументов.

Лучше сделать так, чтобы конструктор массива принимал нужное число аргументов.

http://stackoverflow.com/questions/9100680/member-function-template-with-the-number-of-parameters-depending-on-an-integral
#308 #952778
>>952457
Буст офигенен как либа. Использовал в laba1 для длинной арифметике.
#309 #952867
Проблема с винапи.
Есть один экзешник (exe1), который запускает другой экзешник(exe2), второй выполняется действия(копирует файлы).
Проблема в том что ехе1 и ехе2 находятся в разных директориях, и когда ехе2 спрашивает свой путь через GetModuleFileName() ему выдает путь ехе1.
Вероятно, в CreateProcess нужно добавить какие либо данные в STARTUPINFO, к примеру, но ничего похожего на это я не нашел..

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v=vs.85).aspx
952871
#310 #952871
>>952867
Лол, третий с конца параметр в CreateProcess, в глаза ебусь.
#311 #953016
>>952339
Можно кукарекнуть, что это мой говнокод, который хотя бы работает?
Про массивы я как раз спрашивал и уже даже понял, как это реализовать. Насчёт локали и констант не понял. Поясни подробней, что не так.
61 Кб, 1190x673
#312 #953028
Мучачос, кто сталкивался с пикрелейтед? Что делать, чтоб исправить? VS 2015
953124
61 Кб, 1190x673
#313 #953124
>>953028
Ну неужели нельзя сделать нормальный интерфейс . Макось уже успела поменять кучу хуйни, а тут этот кривой неудобный дизайн из года в год тянут.
953128953198
#314 #953128
>>953124
Что не так с интерфейсом?
#315 #953198
>>953124

В случае с треугольниками там все нормально - их центры, которыми они закреплены, выровнены.

Надпись "сортировка по" выровнена по середине относительно выпадающего списка, тоже норм.
63 Кб, 927x582
#316 #953204

>Захотел такой написать проект на Qt


>Нашел такой на сайте файлик qt-opensource-windows-x86-msvc2015-5.8.0.exe , 1 Гб весит ну да ладно


>Оп, Qt да вместе с тулчейном студии. Два в одном, хорошо придумано


>Ставишь такой Qt, заходишь в настройки - а там пикрилейтед. Компилятора нету, ничего нету.



Это теперь отдельно качать студию?
Можно подключить утилиты Mingw, но ничего хорошего не будет.
953290953407953438
#317 #953290
>>953204
Если нужно только Qt, то MinGW за глаза хватит. Если нужно GCC по-свежее, пусть MSYS ищет или Cygwin
953407
#318 #953407
>>953204

Qt принципиально не может распространять тулчейн студии. MSVC в названии означает совместимость бинарных библиотек с MSVC. С MingW они несовместимы.

Тулчейн (или только компилятор) есть в SDK и WDDK, емнип.

>>953290

Cygwin не подойдёт без костылирования, инфа сотка. MSYS нафиг не нужен.

https://sourceforge.net/projects/mingw-w64/files/mingw-w64/
#319 #953438
>>953204
Ну выбери сам сисрут, хули.
953448
#320 #953448
>>953438

Нахрен?
953470
19 Кб, 531x385
#321 #953454
Не обновлял MinGW с 2013 года, стоял 4.8.1, решил обновиться. Утилита из существующей установки новых версий не увидела. Пришлось взять последний установщик с сайта.

Что за смысл опций он предлагает, а именно threads и exceptions?
По первой прочитал:
http://stackoverflow.com/questions/17242516/mingw-w64-threads-posix-vs-win32
Разница как бы есть, но ее как бы нету, да?
953463
#322 #953463
>>953454

>Разница как бы есть, но ее как бы нету, да?



Разница в том, что программа, у которой куча тредов, будет работать быстрее с Win32-тредами, но не будет полной поддержки C++11.

>и exceptions?



https://wiki.qt.io/MinGW-64-bit#Exception_handling:_SJLJ.2C_DWARF.2C_and_SEH

Различные модели несовместимы.
#323 #953470
>>953448
А я понял тебя. Ты захотел поставить Qt с либами студийными прямо из коробки. Но так как VS и Qt под разными лицензиями, Qt не может раздавать VS либы. Качай отдельно или ставь студию.

Нахуя они тебе вообще MSVC, если у тебя нет студии и ты не собираешься с ней интегрироваться? Для таких как ты есть большая кнопка download и там есть mingw.
953732
#324 #953478
Возник такой вопрос, для которого у меня есть пара решений, но я в них не уверен.

Задача: Массив, в котором каждый элемент содержит данные уникального типа (т.е. первый элемент может содержать пару int'ов, второй int, bool и string и т.д.). Каждый элемент будет структурой/классом и в нем будут идентификаторы типа элемента, указывающие на то какой именно это элемент, так что при считывании я буду точно знать какие данные он должен содержать.

1-ый вариант решения: создать класс, который будет включать в себя все-все-все типы данных, используемых в его элементах и затем при добавлении в/считывании из массива просто записывать/считывать лишь нужные данные в/из каждого элемента. Очевидный минус - каждый элемент будет избыточен процентов на 95.

2-ой вариант передавать уникальные данные в бинарном виде, а затем при считывании, разбивать бинарные строки на нужные переменные. Тут придется повозиться с объемами бинарных строк. Откровенно говоря тут я плаваю и не слишком понимаю можно ли вообще по этому пути пойти. Во-первых потому что все данные я считываю из xml файла и на данный момент слабо представляю себе как я буду считывать бинарную строку, а затем ее преобразовывать. Но если все же это сработает, такой путь кажется оптимальнее. Плюс, я не уверен что такой вариант будет работать быстрее, хотя скорость для меня не столь важна в данном случае.

Возможно есть какие-то более изящные методы.
953483953618
#325 #953483
>>953478
То есть теоретически каждый элемент массива может содержать неограниченное количество базовых типов?
Или всё таки есть ограничение на количество?
953486953558
#326 #953486
>>953483
В любом случае лучше всего первый вариант с union.
http://en.cppreference.com/w/cpp/language/union
Если тебе нужно чтобы была возможность в массиве хранить бесконечное количество и сочетание разных типов - то делай union-структуру, а в массиве храни массивы этой структуры.
953558
#327 #953490
Бля забыл что еще есть std::variant и QVariant, окторые могут решить проблему.
953608
#328 #953558
>>953483
нет, количество переменных в каждом типе элемента вполне определенное для каждого типа, само разнообразие типов тоже ограничено, порядка 30 штук.
Все они в случайном порядке встречаются в массиве.
>>953486
да, спасибо, похоже это то что нужно.

struct S
{
int type;
union
{
myStruct1 a;
myStruct2 b;
myStruct3 c;
.....
};
};
953619
#329 #953608
>>953490
std::variant же не поддерживает хранение любых типов, то есть нельзя заслать неспециализированный шаблон в какую-либо функцию. Это по сути типобезопасный union.
В QVariant можно запихать любое говно, которое ты ранее продекларировал с Q_DECLARE_METATYPE. Только и этот костылек мне не нравится. Наверно, еще немало времени пройдет, пока появится полиморфная обертка над std::variant для хранения любых типов.
953615
#330 #953615
>>953608
Хм, тут то я проебался. Давно новости не читал. Для таких целей ввели std::any.
#331 #953618
>>953478
какую практическую задачу пытаешься решить?
953651
#332 #953619
>>953558

>само разнообразие типов тоже ограничено, порядка 30 штук.


Ну сделай 30 классов, наследующихся от одного базового и пихай их в массив указателей на базовый.
953641
#333 #953641
>>953619
Не нужно так делать.
#334 #953651
>>953618
У меня есть некие события, каждое из которых описывается рядом переменных.
Типов событий ограниченное количество, примерно 30. Каждый из типов описывается своим набором переменных базового типа.

Массив - это совокупность случайного набора этих событий.

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

В принципе union, вроде бы, уже решил эту задачу. Для каждого типа событий я создал структуру с набором присущих ему переменных, затем создал еще одну структуру, единичного события (singleEvent), куда вписал enum, который определяет тип события и union, с переменными типов структур различных событий.

В основном классе создал массив из SingleEvent.

Теперь, проходя по этому массиву я считываю тип события и через switch раскидываю это по соответствующим полочкам.
953686953718953740
#335 #953686
>>953651
Можешь использовать паттерн visitor, тогда твое событие будет само вывзывать необходимые методы посетителя. Только вот с твоими 30 классами это будет полный пиздец, на каждое событие по методу.
Кстати, а ты не думал, что их можно каким-то образом объединить (то есть подобное к подобному и так далее), потому что 30 разных событий, как по мне, это уж слишком дохуя, причем они все имеют только одного родителя.
Хотя в SDL гоняют union'ы для хранения событий и вполне себе ничего живут.
953761
#336 #953691
Покидейте годных гайдов под boost spirit
#337 #953718
>>953651
Уж не движок ты делаешь игровой?
953757
#338 #953732
>>953470

Верно написал. Я не ОП, но я хотел сказать, что в Windows Sysroot не нужен. ЕМНИП, он нужен для кросс-компиляции в POSIX-системах (Cygwin, например, но совместимость Qt с Cygwin не поддерживается).
#339 #953740
>>953651
Если ты хочешь именно хранить данные в массиве (а не ссылки на них) то через юнион единственный вариант - нужно чтобы объекты разных ивентов были одинакового размера. А вообще чтобы небыло "считываю тип события и через switch раскидываю" придумали полиморфизм.
953757953760
#340 #953757
>>953718
нет, но применять собираюсь это в игре на UE4

>>953740
Кстати да, про полиморфизм все время забываю.
Насчет одинакового размера, из того что я прочитал юнион переменная просто занимает размер максимального элемента, что для массива должно быть приемлемо, или это не так? Во всяком случае компилятор по этому поводу ошибок не выдал.
#341 #953760
>>953740
Чем плох старый добрый switch?
953763
#342 #953761
>>953686
про объединение думал, конечно, но там сложновато с подобием, плюс при дальнейшем написании кода это точно будет путать, поэтому от этой идеи решил отказаться.

По поводу визитора, нагуглил, надо почитать может быть получится извлечь профит.
#343 #953763
>>953760
в моем случае в свиче все равно будут функции, каждой из которых передается свой тип события. Поэтому проще сделать полиморфную функцию и вообще обойтись без свича.
#344 #953772
Привет
420 Кб, 1024x1024
#345 #953827
>>951410
Сейчас дочитываю C++ Templates - The Complete Guide и смотрю на такие вопросы как на пустое место.
953842
#346 #953842
>>953827
И че? Нахуя это еботня кому-то нужна. Ты бы еще стандарт полностью прочитал
#347 #953928
В прилоге некоторое количество разнородных функций, которые для удобства и упрощения я размазал по десятку .cpp
В .h описал все функции, заинклюдил во всех связанных .cpp. Вроде работает всё, но:
1) я правильно внутри h описал функции? Вид:
void sendsignal(int signal);
std::string sendmessage(std::string message);
Или без описания можно/нужно?
2) взаимосвязано с №1. Я сделал инклюд в .h
#include <string>
Это нормально? И можно ли в h разом описать все инклюды, общие для всех .cpp?
Я предполагаю 1-2 хидера по 15-25 описанных функций (т.е. 15-20 строк) в одном.
Т.е. идея свести все функции для удобства отслеживания.
В гугловыдаче один чувак топит за отсутствие инклюдов в хидерах, другой в 10 пунктов топит за использование хидеров при повторении инфы.
953937
#348 #953937
>>953928

>(т.е. 15-25 строк)


пофиксил
>>953928

>другой в 10 пунктов топит за использование хидеров при повторении инфы


Уточнение: в смысле один и тот же набор инклюдов - повторение, по логике.
953944
#349 #953944
>>953937
Там нужно макросы добавлять всякие, чтобы везде инклюды кидать.
На вижле #pragma once, в остальных компиляторах другие, но это всё гуглится.
#350 #953945
Как сделать специализации чтобы работало?

class Yoba
{

template<typename T>
T test() { return T(); }

template<>
int test() { return 1; }

};

template class не подходит, один объект должен выдавать разные типы
953946953980954038
#351 #953946
>>953945
Раскрой вопрос, пока не понятно. Желательно на примере, ещё лучше если это какой-то код, как ты себе это представляешь.
954130
#352 #953980
>>953945
template<>
int test<int>(){ return 1; };

А вообще, можно без тимплитов оверлоады сделать:
int test() { return 1; };
954034
#353 #954034
>>953980
Хотя нет, я протрезвел и понял, что написал хуйню. Оверлоад ты не сделаешь. Но и специализация у тебя будет хуевая, т.к. тимплитный аргумент руками писать будет надо
#354 #954038
>>953945
ideone.com/rFmjbP
#355 #954088
А что C++ настолько ущербен, что без костылей даже не может сказать "Hello, World!"?
954109
#356 #954109
>>954088
не может, не может, иди в тред web-элиты, господин_две_строчки_на_метод
954121
#357 #954121
>>954109
Ну и как это, каждый день ощущать себя ущербным?
156 Кб, 858x881
7 Кб, 382x93
#358 #954130
>>953946
Я сам запутался, пытаюсь эффективно создавать переменные для интерпретатора скриптов (значения передаются сторонним С функциям типа set_as_int и я не могу их шаблонизировать), пока получается так:

Scalar var = script.newScalar<const char ж>("value")
Scalar var = script.newScalar<int>(14)
Array var = script.newArray({ script.newScalar<const char ж>("a"), script.newScalar<const char ж>("b") })
Array var = script.newArray<std::string>({ "a", "b", "c" })
Hash var = script.newHash({ { "a", script.newScalar<int>(1) }, { "b", script.newScalar<int>(2) } })
Hash var = script.newHash<int>({ { "a", 1 }, { "b", 2 }, { "c", 3 } })

Лучше же никак не сделать?
954164
#359 #954149
>>952457
<boost/filesystem.hpp> - говорит за себя
<boost/lexical_cast.hpp> - строки в числа и обратно
<boost/format.hpp> - запихиваем что угодно в строку
<boost/current_function.hpp> - портабельный способ определить позицию в коде (для дебага)
До с++11 были ещё треды и ряд других вещей которые засунули из буста в стандарт
954705
#360 #954164
>>954130
Что за шрифт и схема в редакторе?
954176
#361 #954176
>>954164
Anonymous Pro с обосравшимся хинтингом в qt-креаторе с вручную настроенными цветами
1545 Кб, 738x283
#362 #954302
>>947007 (OP)
Сап ананасы, вкатился нуфаг. Дали задание:найти количество отрицательных элементов массива и вставить найденное кол-во перед первым в массиве отрицательным числом. Я написал какую-то поеботу, которая ищет сами элементы, но не могу додуматься, как вывести их кол-во. Прошу подсказки, пик прилагаю.
954307955094
#363 #954307
>>954302
C-тред в другой стороне.
#364 #954383
>>947810
А вывод кирилицей на КьюТихе починили?
#365 #954401
Блядь, ананасы. На дворе 2017 год. Какого хуя студия не умеет создавать файлы в юникоде?
954411954425
#366 #954411
>>954401
нахуй тебе файл в юникоде?
954419
#367 #954419
>>954411
Нахуй что-то не в юникоде в 2017?
1 Кб, 523x22
#368 #954425
>>954401

>студия не умеет


)
954432
#369 #954427
Сап, крестоносцы. Подскажите литературу или туторы, или хоть что-то, что помогло бы разобраться как с изображениями работать? Уровня для студентоты.. Как их в памяти хранить и всё такое.
954436
45 Кб, 1439x821
35 Кб, 1439x818
#370 #954432
>>954425
Ну ахуеть, да? В 17 то году самое то обмазываться windows 1251
Да, студия на русском, да, я говноед
954436954470
#371 #954436
>>954432
Уже существующий файл нужно же конвертнуть в UTF-8, то гжде стрелочка меняет только отображение, а не содержимое файла.
>>954427
Если для студеноты то можешь http://cimg.eu/reference/group__cimg__tutorial.html посмотреть. А так-то нужно под задачу подбирать вариант. Пожет сразу в OpenGL пердолиться, может какое-то SFML или еще чего откопать.
954439954441
#372 #954439
>>954436
Хм, если уж совсем грубо говоря, то мне нужно запилить через классы сравнение двух изображенийи более., просто не сильно представляю себе как эти изображения мацать и сохранять.
Студетота. Спасибо за тутор.
954443
#373 #954441
>>954436

> Уже существующий файл нужно же конвертнуть в UTF-8, то гжде стрелочка меняет только отображение, а не содержимое файла.


Я в курсе, как руками конвертить. Вопрос в том, какого хуя студия сама не создаёт его с юникодовской кодировкой?
#374 #954443
>>954439
Возьми любую либу для работы с изображениями. Или тебе прям все-все надо самому написать?
954445
#375 #954445
>>954443
Именно самому.
#376 #954470
>>954432
Ёбаная параша
#377 #954491
Sup, аноны подскажите как тому кто учил pure C вкатиться в кресты. Просто когда я начинаю читать любой учебник первые много страниц все понятно и очень скучно, но там если пропустить рандомное число страниц становится нихуя не понятно.
#378 #954496
>>954491
Эккеля почитай. Там вроде как раз для таких написано.
sage #379 #954567
>>954491
Посмотри на C++ Tour Страуструпа
#380 #954570
>>954491
Нихуя не понятно начинается обычно с ООП. Вот в этом месте тебе нужно забыть как это процедурно программировать, и начинать думать вв рамках ООП.
#381 #954606
что не так с этим кодом?
http://ideone.com/ZTggVd
954642
#382 #954642
>>954606
1) Ускорил на десять процентов, добавив пробел: http://ideone.com/bj8N8a (просто перекомпилировалось).
2) http://ideone.com/mqCLqO - удалил код второй функции, лол. Код первой функции замедлился.

Запусти на локальной машине, никаких гарантий производительности Ideone не даёт.
954676954731
#383 #954663
Libre Office, написан на C++, но лагает просто жутко даже на крутом компе. Особенно Draw.

А вы, плюсисты, тем временем Java ругаете за тормознутость.

Я сомневаюсь, что разработчики LO уступают вам в мастерстве, скорее наоборот.
Они точно не ламеры и лучше вас среднестатистически.

И выходит, что C++ не так уж и хорош, как его хвалят.
954690954853
#384 #954676
>>954642
Первый вызов без анролла работает быстрее (Больше инструкций-больше кэш миссов?) Это я к тому что Loop Unrolling не обязательно будет отимизировать цикл по скорости.
954692
#385 #954690
>>954663
0/10, try harder
#386 #954692
>>954676

Прочти то, что я написал: я никак не изменил код первой функции в 2) и при этом она работает хуже.

Олсо, учти векторизацию.
954731
#387 #954699
>>954491
все очень просто
там где раньше делал макросами - теперь делаешь типобезопасно на шаблонах
плюс шаблоны позволяют делать статический полиморфизм
там где раньше для реализации динамического полиморфизма ручками писал реализации vtable теперь пользуешься встроенными виртуальными функциями
ссылки используешь везде где нужно передавать что-то без копирования, раньше для этого указатели нужны были
указатели остаются нужны для реализации механик косвенного обращения
для реализации adhoc полиморфизма есть перегрузка
ну и прочее в том же духе
те на крестах по сути уже встроено для тебя куча механизмов что раньше приходилось либо писать ручками (тот же полиморфизм через vtable), либо делать это ослабляя типизацию (через макросы или void*)
#388 #954705
>>954149

><boost/format.hpp>


есть мнение что fmt поприятней будет..
#389 #954731
>>954692
>>954642

>Ускорил на десять процентов


>замедлился


Абсолютные значения не имеют значения (каламбур лол), у нас же не процессор реального времени и тайминги могут скакать в пределах +/-.
А вообще, ладно, проехали, я взбугуртил из-за того что был сегодня на собеседовании и там спросили как можно оптимизировать по скорости код на примере. Я упомянул simd и распараллеливание на потоки. Когда он начал говорить про анролл цикла(че-то там про уменьшение количества сравнений, без явных simd, видимо), я сказал, что это не даст гарантированного прироста еще и замедлить может при определенных условиях, все зависит от архитектуры процессора.
954834
#390 #954834
>>954731

Те же строки можно сравнивать с помощью uint64_t (если есть) - типа, СИМД ручками.

Анролл даёт гарантированный прирост производительности в очень коротких циклах без вызовов функций. BTB его уменьшает, но он есть.

Но в данном примере всё зависит от флагов компиляции. Этот пример очень простой, и GCC наверняка векторизовал его с помощью SIMD.
#391 #954853
>>954663

> написан на C++, но лагает просто жутко даже на крутом компе


Duke Nukem 3D был написан в 1995 году. Выдавал 120 кадров в секунду на 486 кудахтере с 8MB оперативной памяти. Единственная причина почему у нас нет шутеров с 1200 фпс в 2017 году -- это то, что программистов перестали учить ассемблеру. Software is not a platform. Hardware is a platform.

https://www.youtube.com/watch?v=CezOHqlXAFY
954855
#392 #954855
>>954853
А может потому что никому нахуй не уперлось 1200 фпс в шутерах?
#393 #954899
Писал долгое время на Java, но теперь понадобилось писать на С++, до этого писал на нем в вузе.
Скажите, в Windows нативно как-то организована сборка мусора, чтобы автоматически освобождались из памяти объекты, на которые нету больше ссылок, или тут нужно самому их освобождать?
Например:
void OtherClass::callThisManyTimes() {
//создаю такой объект
MyClass *myClassInstance = new MyClass();
myClassInstance->doSomething();
//...
//тут нужно вызывать delete(myClassInstance), или в ОС есть подсчет ссылок ?
}

Помню в вузе с этим были проблемы, такая ситуация вызывала исключительные ситуации в неожиданных моментах
955104
#394 #954905
В самом с++ сборка не предусмотрена, но есть разные умные указатели, которые вызывают деструктор, если на владеющий объект ничего не ссылается. А так память, сжираемая процессом, никуда не уйдет, но когда процесс завершится, то ОС сама освободит всю виртуальную память, связанную с процессом
#395 #954906
А вот для этих "умных указателей" правильно вызвать деструктор вручную?
954924955022
#396 #954924
>>954906
Для указателя ничего вызывать не надо, ты же не на куче его создаешь, а на стеке(в джаве все объекты в куче, если что)
#397 #954976
Дратути, в винде для ожидания объектов ядра, в моем случае потока, можно юзать WaitForSingle/MultipleObject, однако работать необходимо с std::thread. Собственно вопрос: есть ли в стандартной библиотеке подобный механизм ожидания с таймаутами без использования дополнительных мьютексов и кондишн вариеблов? Или для подобных целей нужно юзать std::async и чекать std::future? Чесно сказать, мне кажется что мультипоточность в стандартной либе какая-то неполноценная, например, в винде есть события, а в либе что? непонятная хуйня на мьютексах, ну что за говно?
955030955106955130
#398 #955022
>>954906

Деструктор указателя или объекта, на который они указывают? Если ты создал указатель не на стеке (т.е. объявив объект) - надо. Вызывать деструктор объекта в обход указателя не следует.
955024
#399 #955024
>>955022

>на стеке (т.е. объявив объект)



Не на стеке - это new или placement new.
#400 #955030
>>954976
зачем тебе стандартную библиотеку юзать, если ты кодишь для винды?
955352
#401 #955094
>>954302
объяви вне цикла новую переменную, типа int, не забудь ей сразу присвоить ноль, затем в цикле, каждый раз как будешь натыкаться на отрицательный элемент, прибавляй к ней единицу, при выходе из цикла получишь свое количество. Надо сказать, к программированию это мало отношения имеет, тут скорее логику подключить надо было.
955129
#402 #955104
>>954899
Ну в c++ нету сборщика мусора. Советую не полениться и осилить таки std::unique_ptr и std::shared_ptr. Также неплохо бы осилить ссылки, l-value и r-value. После этого можно будет более менее с такими вопросами разбираться.
#403 #955106
>>954976
Можно пример синхронизации с другого языка, который тебя бы устроил?
Ну и стандартные мьютексы не подходят? (с++11)
http://en.cppreference.com/w/cpp/thread/mutex
955356
9 Кб, 703x199
#404 #955119
Не знаю, где спросить. Спрошу тут. Я студент и в институте сидел на делфи, который почему-то был мыльным. Пришло время перекатываться на вижуал студио, но мыло осталось. А я думал не будет его. Как с ним бороться? Откуда оно? Вот, на скриншоте видно, как разрешение в программе проёбано. Изображения тоже не пиксель в пиксель отображаются, а с мыльцой.
955128
#405 #955128
>>955119
У тебя Win10 и ты менял масштабирование интерфейса, я так понимаю?
Если за, тогда выкачай Windows 10 DPI fix или как его там, вроде так называется. Мыло сразу убирает
955142
#406 #955129
>>955094
Спасибо, уже додумал до этого и сдал прогу.
955414
#407 #955130
>>954976
Насколько тебе важна производительность? Сколько я книг не читаю, но многие пишут, что ежели ты собрался что-то стоящее написать, не стоит заострять раньше времени внимание на обоссаных API, которые, во-первых непортируемы, а во-вторых настолько расщеплены (то есть реализуют малый набор операций, и лежат в одной куче, грубо говоря), что их все в идеале, да и даже не в идеале, заебешься просто изучать.
Если бы ты антивирусы писал, драйвера, системные сервисы или какую подобную поеботу, тогда да.

Что мешает тебе передать выполнение другому потоку, то есть std::this_thread::yield() и std::chrono для замеров интервалов времени? Что ты реализуешь? Реактор, проактор?
955352
#408 #955142
>>955128
Похоже на правду, хотя масштабирование не менял. Если сбилдить, то в свойствах эту парашу можно отключить.
Спасибо.
#409 #955178
С fps тенденция чётко видна.
Чтобы не перегревалась видеокарта, в новых играх приходится ставить 60 кадров. Причём, это игровая видеокарта, а не среднечёк.
Раньше можно было выжить сотни fps, тот же Дюк, потом возьмём для примера Cube 2, где fps упал в разы, но оставался внушительным, а сегодня эта цифра упала ещё в 3 раза.

Через 10 лет, для красивой современной графики придётся покупать супердорогую для рашкинского среднекласса видеокарту.
За те же бабки будут идти "машины" Российского производства.

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

Не ясна логика компаний-игроделов, им же нужно, увеличивать продажи любыми способами, а их AAA-игры идут всё у меньшего количества геймеров.

Но они не станут тратиться на дополнительные оптимизации, они слишком дорого обходятся. Многие проекты так вообще жить не смогут, т.к. расоходы будут перебивать прибыль.

Вероятно, что-то в этой сфере в скором времени изменится, скорее всего появятся новые ниши. Но конкуренция по истине огромна.
955197955252
#410 #955197
>>955178
школотрон-аналитег, спешите видеть
955202
#411 #955202
>>955197
Сейчас школотроны умнее пердунов-альтфаков, так что завали ебало, хейтерский выродок.
955214955215
#412 #955211
>>952010
*std::find(std::begin(arr), std::end(arr), query);
Где query - искомый элемент
#413 #955214
>>955202

>умнее


это твоя мамка тебе сказала, аналитег?
#414 #955215
>>955202

>по истине


>КУДАХ БАБАХ КУКАРЕКУ


Уроки-то сделал?
sage #415 #955252
>>955178

>Чтобы не перегревалась видеокарта, в новых играх приходится ставить 60 кадров.



Бред какой-то.
955282
#416 #955282
>>955252
Значит, на полохой гарфике играешь. Или игры говяные.
955309
#417 #955309
>>955282

Furmark - достаточно говяная игра для HD6970? TDP больше 200 Ватт.
955500
#418 #955352
>>955030
>>955130
Просто разбираюсь с многопоточностью. Собственно чтобы код был портируемым и спросил.
По сути, один поток должен крутиться в цикле и периодически проверять (ожидать где-то пол секунды примерно) готовность другого потока который висит на блокирующем вызове.
Понятно, что реализаций подобного множество, мне было интересно, нет ли в стандарте сахарку для такого).
А вот по поводу yield можно подробнее, а то я понял, что он всего лишь вытесняет текущий поток.
#419 #955356
>>955106
Я только плюсы и знаю, лол. Мьютексы подходят, просто рассматриваю различные варианты.
#420 #955414
>>955129
малаца, заходи еще.
#421 #955500
>>955309
Запусти современные игры не не неси чушь.
955518
#422 #955509
Двач, можешь подсказать что-нибудь про то как связывать многофайловые программы с несколькими классами? У меня большая с этим проблема, я не знаю где правильно создавать экземпляры классов, как делать чтобы они имели доступ друг к другу, как всё это дело наследовать и т.д. Просто у меня всё путается, переплетается и выдаёт различные ошибки, не могу нормально спроектировать код. Где получить эти знания я тоже не знаю, т.к. в книгах такое не рассказывают.
sage #423 #955518
>>955500

Самонадеянная макака ты, ни одна современная игра не разогревает чип сильнее, чем Фурмарк.
137 Кб, 500x439
#424 #955526
>>955509

>Где получить эти знания я тоже не знаю, т.к. в книгах такое не рассказывают.


Вон из профессии.
955528
#425 #955528
>>955526
Вон из треда школьник
#426 #955532
>>955509
Тебе нужно искать книги по архитектуре программного обеспечения, а не по языку программирования. Сначала посмотри Gang of Four Design Patterns.
955641
#427 #955641
>>955509
Ну сделай сначала блок схему архитектуры, если не можешь сообразить сразу в коде.
https://en.wikipedia.org/wiki/Class_diagram
В общем случае тут и посоветовать нечего, скорее всего ты просто выбрал не ту профессию, если у тебя не получается проектировать в голове даже простые вещи.
Архитектура от задачи зависит. Хотел тебе написать о разделении клиентского и backend-кода, но это тоже не всегда нужно.
>>955532
У этого студента проблемы с несколькими классами в разных файлах, а ты ему паттерны советуешь, лол. Вещь хорошая, но ему вообще не поможет, если у него не получается три класса связать без ошибок.
955836
#428 #955836
>>955641
По сути, там наглядно показывается связь компонентов друг с другом. А ежели вопрошающий не знает, как связать два класса, то ему и UML не поможет. Нужно хотя бы синтаксис понимать, хотя бы минимум.
#429 #955866
>>955509
чел, не тупи, пиши все в одном .cpp файле
на более-менее норм компе можно спокойно работать в любой ide с файлом в несколько сотен тысяч строк без тормозов и с незаметной глазу временем компиляции
686 Кб, 500x555
#430 #955914
Можно в Qt перловскими регулярками QRegularExpression напрямую, без ебли с циклом получить все подстроки заматченые одной группой? Т.е.
QRegularExpression(R"(((?<one>\w+)=(?<two>\d+)\s+)+")
в "foo=12 bar=42"
заматчит только последние вхождения
<one> bar
<two> 42
955992
#431 #955957
поясните за Borland C++
мой препод совковых времен с пеной у рта доказывает, что это потрясающая IDE
но у меня чет есть подозрения
955967
#432 #955967
>>955957

>это потрясающая IDE


Для 1998 года была неплохая IDE. Так что препод прав. Спроси его только, что он делал последние 20 лет.
955971
#433 #955971
>>955967
он 15 лет назад вышел на пенсию
и с тех пор преподаёт
955972
#434 #955972
>>955971
Покажи ему Visual Studio 2017 и CLion 2016. Пусть посмотрит на чудеса современности лол.
956495
#435 #955985
Работает ли next_permutation, если у меня в перестановке есть одинаковые элементы? (то есть она не совсем перестановка).
955995
#436 #955992
956001
#437 #955995
955999
#438 #955999
>>955995
О, класс. Спасибо.
А то я тут почитал http://www.cplusplus.com/reference/algorithm/next_permutation/
Меня смутило: "A permutation is each one of the N! possible arrangements the elements can take".
956257
17 Кб, 276x300
#439 #956001
>>955992
Не совсем то что я хотел, но сойдёт.
956239
#440 #956008
Можно ли сконпелировать под винду с андроида?
956066
#441 #956066
>>956008
Думаю, что пока никто не реализовал.
Задача без задач. Зачем тебе это?
956074
#442 #956074
>>956066
Да у меня трустори. Делал я, значит, laba1 на C++, конпелировал у себя дома на g++ с ubuntu. Я специально ухудшал свой код, в результате он стал менее читаемым и безопасным, зато конпелировался даже на c++98 (тестил на cpp.sh) и препод не доёбывался (он любит максимально старомодный код). Думал, что никаких проблем не будет, но на компах в классе была visual studio, да и ещё 2010, где мой код, конечно же не работал. У одногруппников на 2015/2017 студиях код тоже не работал. Как я понял, дело в Visual C++, которая имеет некоторые отличия. Вот я и поинтересовался, можно ли как-то воспользоваться g++ на ведроиде с целью конпеляции на wndws.
Пока что остановился на установке ОС на USB, т.к. у меня даже с C# была проблемы из-за устаревшего софта.
956078
#443 #956078
>>956074
Так тебе на ведре или на убунте нужно компилить? Если убунта, то вот какой-то способ.
http://stackoverflow.com/questions/2033997/how-to-compile-for-windows-on-linux-with-gcc-g
16 Кб, 644x193
#444 #956154
Почему говорит
warning: return from incompatible pointer type
return huita;
100 лет на си не писал
#445 #956160

> char a[] = "слово";


> char b[] = "aword";


> std::cout << sizeof(a) << "\t" << sizeof(b) << std::endl;



Не могу понять, вроде оба массива являются char, но для русского массива выделяется в 2 раза больше памяти, не подскажет кто почему?
956164956260
#446 #956164
>>956160
Потому что кириллический символ занимает 2 байта и не помещается в один char. Можешь использовать 2-байтовые чары:
wchar_t a[] = L"слово";
std::wcout << a;
но там какая-то возня с локалью ещё нужна
956242
#447 #956239
>>956001
А Шрёдингер разве тоже пидором был?
#448 #956242
>>956164
Ууу, си-плюсы-джава шизофрения.

Хорошо, что мы этого говна в Питоне не знаем.
#449 #956257
>>955999

Отправь багрепорт.
#450 #956260
>>956160

>Не могу понять, вроде оба массива являются char, но для русского массива выделяется в 2 раза больше памяти, не подскажет кто почему?



Потому что в твоём компиляторе используется UTF-8. Сделай текстовый файл в UTF-8 в Notepad++ - увидишь то же самое.

Чтобы узнать число букв нужно использовать другие функции.
#451 #956262
Например, а имеет следующий тип:
const unsigned int const a = &c;
Можно ли весь тип переменной а(const unsigned int const
) вывести в консоль?
956263
#452 #956263
>>956262
boost вроде умеет через type_info работать
#453 #956331
Пишу один проект, получаю такую ошибку:

>could not convert 'nullptr' from 'std::nullptr_t' to 'QModbusDataUnit'


>return nullptr;



Код выглядит так:
QModbusDataUnit::RegisterType regType = QModbusDataUnit::HoldingRegisters;
bool ok = true;
int startAddress = this->ui->lineEditRegAddr->text().toInt(&ok, 0);
if (ok == false) {
return nullptr;
}
956334956387
#454 #956334
>>956331
Почему nullptr несовместим с экземпляром класса?
#455 #956356
Ананасы, как можно привести shared_ptr<Foo> к shared_ptr<Bar> при условии, что Bar наследуется от Foo?

Я кроме как получить сырой указатель и кастануть его dynamic_cast`ом ничего не придумал

http://pastebin.com/DR6kPzQH
956371
#456 #956371
>>956356
Пньятненько, надо было не думать, а погуглить
#457 #956387
>>956331
Вот это накрутили в С++.
http://stackoverflow.com/questions/3030829/c-is-it-possible-to-set-an-object-to-null
Оказывается, экземпляр класса - это не указатель в памяти, как объясняли в вузе. Переделал тип возвращаемой переменной в подпрограме на указатель с экземпляра, а дальше - разименовываю его, проставив звездочку
956411
#458 #956411
>>956387
Ты бы блять хотя бы объявление функции показал. Откуда мне знать, что она возвращает?
#459 #956495
>>955972

>Visual Studio 2017


Есть смысл с 15 перекатываться?
956505
#460 #956505
>>956495
Если ты не CUDF-ёб, то, думаю, можно. В c++17 нормальные такие плюхи завезли.
956508956564
#461 #956508
>>956505

>> CUDA


fix
#462 #956564
>>956505

> В c++17 нормальные такие плюхи завезли


Например?
мимо clion-оёб
956730
12 Кб, 238x313
#463 #956587
Есть способ кастовать типы без использования указателей и ссылок?
956635956759
#464 #956635
>>956587
нет, будет слайсинг
#465 #956640
Челы, я студентота еще. Просвятите на сколько много алгоритмов нужно знать на джуна и какие?
956641956662
#466 #956641
>>956640
Есть много алгоритмов, но TOP PRO CODERS наиболее часто пользуются таким:
StackOverflow-Google-Yandex Driven Development
463 Кб, 1270x1333
287 Кб, 1254x1046
#467 #956645
Извините, конечно, но что мне нужно из этого устанавливать?

Решил второй раз попробовать вкатиться, в прошлой версии такого не было
956650956663956686
#468 #956650
>>956645
Мб не будешь вкатываться?)
956654
#469 #956654
>>956650
Ну че ты начинаешь
#470 #956661
Допустим у меня есть куча неповторяющихся байтовых строк (с повторяющимися символами) разной и мне нужно их так записать так, чтобы потом можно было однозначно восстановить. Первая идея - использовать битовую маску:
Строки abcd,efg,hjklm
записываем abcdefghjklm и маску 11110001111
Так вот, вопрос: можно ли это сделать как-то компактнее? Понятно, что строчку можно сжать всякими хаффманами и lz, но меня сейчас больше интересует собственно оптимизация хранения инфы для восстановления списка строк.
958775958911958966
#471 #956662
>>956640
Ну сортировку там какую-нибудь, поиск в глубину-ширину. Если хочешь выебнуться, то можешь разобраться с ахо-корасиком, красно-черными деревьями и разными дейкстрами-хуекстрами, но энивей это юзлесс говно тебе никогда не пригодится.
#472 #956663
>>956645
Мы то откуда знаем что тебе нужно? Ставь вон инструменты C++ для iOS. Точно нужно!
956669
#473 #956669
>>956663
Для начала изучения пограмирования по книжке же
956680
#474 #956680
>>956669
Install Gentoo Install MinGW.

>Разработка приложений Windows


>Разработка классических приложений

#475 #956686
>>956645
Блин, оно же еще и платное.
Что будет после истечения пробной лицензии?
956717
#476 #956717
>>956686

Нужно будет ЗАРЕГИСТРИРОВАТЬСЯ.
95 Кб, 1200x1200
#477 #956720
Двач, можешь подсказать дауну?
Я создаю "class 1" объект которого создаётся в main.cpp, потом у меня есть другой класс "class 2", объект которого я создаю в первом классе. В первом классе я спокойно могу использовать поля и методы второго класса, но как сделать чтобы второй класс мог использовать первый класс? Я не знаю как это сделать т.к. объект первого класса у меня создаётся в main.cpp... Я вам даже схему нарисовал.
956721
#478 #956721
>>956720
Передавай указатель на экземпляр первого класса при инициализации экземпляра второго.
956722
#479 #956722
>>956721
Так у меня экемпляр второго класса инициализируется в первом классе, как и куда мне передавать указатель? Там нет обратной связи, у меня классы в разных файлах.
956751
#480 #956730
>>956564
Посмотри здесь:
http://stackoverflow.com/questions/38060436/what-are-the-new-features-in-c17

Вот, что я ждал, это следующие:
if constexpr, который, например, для следующей конструкции, не будет заставлять использовать другие шаблонные функции-хелперы или структуры:

template<typename T>
auto fn(const T &x) {
if constexpr (std::is_same<T, short>::value) {
return x;
} else {
return static_cast<int>(x);
}
}

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

>> Template deduction of constructors


Вот это однозначно заебатая вещь, только в объявлениях она не будет работать, как я понимаю. То есть, раньше, чтобы сделать std::map причем с ебанутым маппингом, нужно было делать так, например:
std::map<std::string, std::shared_ptr<std::pair<int, myType>>> map;

Сейчас можно просто при создании std::map нахуячить туда значений и вот эту всю синаксическую парашу можно не писать, то есть:
std::map {
std::pair(firstString, sharedPtr),
};

>> Structured binding declarations


Тоже интересная вещь, сделанная по подобию Python, то есть, преобразует std::pair и std::tuple в наборы значений, не нужно делать pair.first, pair.second, std::get<0>(tuple) ... Что тоже очень хорошо

>> std::string_view


>> Removal of trigraphs


>> Allow typename (as an alternative to class) in a template template parameter


>> non-const .data() for string.


>> non-member std::size, std::empty, std::data like std::begin/end


Неужели блять?!
#480 #956730
>>956564
Посмотри здесь:
http://stackoverflow.com/questions/38060436/what-are-the-new-features-in-c17

Вот, что я ждал, это следующие:
if constexpr, который, например, для следующей конструкции, не будет заставлять использовать другие шаблонные функции-хелперы или структуры:

template<typename T>
auto fn(const T &x) {
if constexpr (std::is_same<T, short>::value) {
return x;
} else {
return static_cast<int>(x);
}
}

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

>> Template deduction of constructors


Вот это однозначно заебатая вещь, только в объявлениях она не будет работать, как я понимаю. То есть, раньше, чтобы сделать std::map причем с ебанутым маппингом, нужно было делать так, например:
std::map<std::string, std::shared_ptr<std::pair<int, myType>>> map;

Сейчас можно просто при создании std::map нахуячить туда значений и вот эту всю синаксическую парашу можно не писать, то есть:
std::map {
std::pair(firstString, sharedPtr),
};

>> Structured binding declarations


Тоже интересная вещь, сделанная по подобию Python, то есть, преобразует std::pair и std::tuple в наборы значений, не нужно делать pair.first, pair.second, std::get<0>(tuple) ... Что тоже очень хорошо

>> std::string_view


>> Removal of trigraphs


>> Allow typename (as an alternative to class) in a template template parameter


>> non-const .data() for string.


>> non-member std::size, std::empty, std::data like std::begin/end


Неужели блять?!
#481 #956751
>>956722

class B {

B(A& a) {
this->a = a
}
}

class A {
B b;
A() {
};
void init_B () {
b(this)
}
}
#482 #956759
>>956587
"кастовать типы" можно, если реализовать соответствующий converting constructor. Если ты про полиморфизм то его нельзя.
#483 #956784
Ньюфажа тут. Что учить дальше? Знаю ООП, темплейты, перегрузку операторов. Где вся суперсложность крестов? Что учить дальше? STL? Boots? Или уже можно въезжать в рисование окошек и пытаться работать макакой?
956785
#484 #956785
>>956784
Таки прямо SFINAE знаешь? А паттерны уже знаешь?
956800
#485 #956800
>>956785
Спасибо, анон. Буду учить. А потом что?
956817
#486 #956817
>>956800
А потом уже куда потянет. Можешь базы данных задрачивать, можешь графику, можешь системное программирование, машинное обучение и еще кучу разных направлений. Я, например, сейчас решил разбираться в вопросах архитектуры, книг много, например Software Architecture in Practise, Pattern-Oriented Software Architecture (она в 5 томах), и еще какие-то есть, я уже забыл, вот эти самые запоминающиеся, как по мне. Ну можешь еще почитать Совершенный код - тоже никому не мешало еще.
#487 #956929
Есть два файла: 1.txt и 2.txt
Как мне проверить каждую строку первого файла с каждой стройок второго файла Строка 1 файла один со строкой 1 2 3 4 5 6....n до конца файла 2. Потом строка 2 файла 1 со строкой 1 2 3 4 5 6....n до конца файла 2?

Я нашелнабросал такое - но такой алгоритм проверяет первую строку одного файла с первой строкой другого, вторую строку со второй и тд.

Если есть исходник такой хуйни - буду рад. В гугле - хуйня подобная моей.
http://pastebin.com/bvDd1LLV
956940956993957039
#488 #956940
>>956929
Ты охуел что-ли код с Цэ в этот тред писать?!
956987
#489 #956943
Есть хуити типа
struct Hui
{
Type type;
union
{
int ival;
float fval;
};
};
где Type - enum co значениями INT и FLOAT

Можно ли как-нибудь сделать функцию, которая бы возвращала ival, когда type == INT и float, когда type == FLOAT?

или я даун и так делать не надо (но тогда как лучше это провернуть?)
#490 #956948
>>956943
Хотя, блядь, это же будет известно только во время выполнения, а следовательно хуй компилятор такое провернёт
957040
#491 #956987
>>956940
Это же C++
956988
#492 #956988
>>956987
Си чистый. Впрочем, никого это не должно удивлять. В универах так и учат.
#493 #956990
>>956943
У К А З А Т Е Л Ь Н А В О И Д
Нассы на лицо человеку, который это с тебя требует.
#494 #956993
#495 #956997
>>956943
Можно такую хуйню с полиморфизмом провернуть: делаешь базовый абстрактный класс с единственным методом getType(), и делаешь enum, элементы которого возвращаются этим методом. Потом каждый примитив оборачиваешь в наследников этого класса и передаешь дальше куда тебе надо. Для выбора стратегии просто пишешь свитч с getType и усе. Это самый тупой способ, можно нормально с помощью какого-нибудь паттерна заебошить(по типу стратегии)
Единственный минус такого подхода - для каждого примитива надо писать обертку(хотя можно и на шаблонах сделать) и передавать все объекты по ссылке(по значению получится срезка)
#496 #956998
>>956943
Алсо, если ты используешь только примитивы разных размеров, то можно выбирать действие в зависимости от sizeof примитива.
#497 #957025
Есть задача скомпилировать исходный код, написанный на С++. Разработчик советует использовать MSVC 2015 CE под винду. В исходниках есть несколько файлов *.cpp. Что нужно сделать, чтобы это всё скомпилировать в одно консольное приложение? С плюсами и вижуал студио никогда дела не имел. Вообще никогда не имел дело с компилированием чего либо. Туплю второй вечер.
957044
#498 #957039
>>956929

>Как мне проверить каждую строку первого файла с каждой стройок второго файла



Уебал бы.
#499 #957040
>>956948

Вот именно. Можно сделать функцию, которая будет возвращать тебе дабл, например - в него помещаются оба типа без потерь, если он шире обоих.
#500 #957044
>>957025

Потыкай кнопку "Файл -> Новый проект -> Проект из существующего кода" (или как оно там по-русски).
#501 #957073
>>956943
Чем any не угодил?
#502 #957162
Мне нужно огородить внутренности работы объекта, поэтому я объявляю нужные классы в классах. Вложенных классов много, поэтому определения методов в .cpp-файле получаются длинные. ЧЯДНТ? Не нужно объявлять классы в классах? Но как тогда защитить работу суперкласса?
957198
23 Кб, 661x412
33 Кб, 661x412
59 Кб, 815x588
#504 #957480
Пытаюсь собрать некий дедовский код (пикрилейтед).
Получаю:
ошибка: cast from 'uint8_t {aka unsigned char}' to 'uint8_t {aka unsigned char}' loses precision [-fpermissive]
crc_hi = crc_lo ^ (uint8_t)(&auchCRCHi); // calculate the CRC

На stackoverflow советуют в таких случаях навешивать приведение типов ( http://stackoverflow.com/questions/21574449/why-is-cast-from-x-to-y-loses-precision-a-hard-error-and-what-is-suitable ) но куда его тут вешать, вроде бы типы всех операндов явно соблюдены?
Пишу на QT, Win32. Возможно, деды писали этот код для С.
957481957576957608
5 Кб, 641x43
#505 #957481
>>957480
Спасибо, Абу!
957612
#506 #957576
>>957480
Диды это под дос писали?
#507 #957608
>>957480
Начнем с того, что ты - пиздоглазое мудило!

&auchCRCH\[i\] - это адрес i-того элемента в массиве auchCRCH.

На кой хуй ты его приводишь к типу uint8_t?

мимо-школьник-кун
957702
#508 #957612
>>957198

Спасибо за ссылку, навела на идею: классы включаю через указатели, а сами вложенные классы определяю в .cpp-файле без вложений.

>>957481

На уой ляд там взятие указателя? Зачем адрес для подсчёта CRC?

Вангую, что этот код никогда не работал.
957624
#509 #957624
>>957612
Ну тогда я повелся на толстоту.
957629
#510 #957629
>>957624
Код взял отсюда:
http://we.easyelectronics.ru/khomin/modbus-rtu-dlya-chaynikov.html

Похоже, его писали под контроллер с достаточным объемом ОЗУ.
957640957676957679
#511 #957640
>>957629
Это объясняет, почему там указатель кастится в 8-битный инт. Если ты под винду хочешь это скомпилить, то поменяй uint8 на что-нибудь побольше, а то у тебя оно банально не влезает.
#512 #957676
>>957629
В первом же комментарии к высеру:

>Данный код на работоспобность не проверял, набросал за 20 минут )


Есть проверенный проект, осторожно! Присутствует быдлокод и нет комментариев ))

А ты и вправду зеленый, раз постишь нерабочий код на с99 в крестотред.
#513 #957679
>>957629
Вот пост с рабочим кодом.
http://we.easyelectronics.ru/khomin/modbus-rtu-dlya-chaynikov.html#comment118068
Проект там под АВР, указатели и инты там 16разрядов.
#514 #957702
>>957608

> Начнем с того, что ты - пиздоглазое мудило!


>


> &auchCRCH\[i\] - это адрес i-того элемента в массиве auchCRCH.


>


> На кой хуй ты его приводишь к типу uint8_t?


>


> мимо-школьник-кун



В голосину блядь
#515 #957820
О чём вы говорите? Чувак использует адрес элемента таблицы вместо элемента таблицы для расчёта CRC, это клиника. Оно даже работать будет - будет выдавать одни и те же хэши для одних и тех же данных и другой хэш для других данных - и даже будет работать в нескольких версиях подряд одинаково, так как константный массив будет с большой вероятностью храниться по одному адресу даже после незначительных изменений.

Вот только распределение там будет другое (скорее всего уёбищное) и для общения по протоколам с использованием CRC это говнище использовать нельзя.
957823
#516 #957823
>>957820

http://we.easyelectronics.ru/khomin/modbus-rtu-dlya-chaynikov.html#comment174196

Вот и разъяснение подъехало. Чтобы это заработало в обычной программе без разделения на флэш/нефлэш нужно писать

auchCRCHi
вместо
(uint8_t)pgm_read_byte(&auchCRCHi)
хуй #517 #957884
Привет
#518 #957921
Сап, крестовый. Помоги, есть такая хуйня :
Как прикрутить QT к Xcode? А то уж больно мне не нравится QtCreator
958448958462959544
36 Кб, 814x130
#519 #958088
В общем, чтобы вызывать С++ коллбеки из скриптов, мне нужно как-то связать объект-обёртку вокруг интерпетатора и сам интерпретатор (который написан на С и подключается как shared библиотека). Не нашёл другого способа, кроме как кастовать this в unsigned long long и хранить число в переменной. Вызывом С++ функций будет заниматься другая shared библиотека, которую подключит интерпретатор и сможет использовать. Допустим в ней будет такой код:

// Подключаем общий yoba.h, упрощённо:
class Yoba {};
потом вместо
Yoba ptr = new Yoba;
получается так
Yoba ptr = reinterpret_cast<Yoba>(18446744072632792624);

18446744072632792624 - адрес объекта того же класса, который создан в той же программе, но в другой shared библиотеке.

Будет ли это работать например с виндовыми .dll?
Правильный ли тип для указателя? У меня выбор из long long, unsigned long long и строки. Компилятор - GCC, должно работать на любой ОС, у меня на 32-битном линуксе вроде работает
958140958463
#520 #958140
>>958088
а почему просто void * не вернуть в таком случае?
958226
#521 #958226
>>958140
Попробую где-нибудь спрятать void*, но тип это только малая часть проблемы.
Суть в том, что у меня есть интерпретатор и с ним можно делать что угодно: эвалить строки, запускать файлы, либо делать всё напрямую через API без расходов на парсинг текста. Но никакой обратной связи нет, о своей С++ обёртке он ничего не знает, сунуть коллбек некуда. Единственный способ задействовать С++ код - подключить разделяемую библиотеку как модуль. И я задумал сделать небольшой модуль, который бы взаимодействовал с С++ кодом который уже в памяти. Получается примерно такая схема:

С++ (yoba.so):
link libperl.so
perl.eval(" YobaModule::call('funcname') ");

C (libperl.so):
link yoba-module.so
yoba_module_call_function(this_cpp_interpreter_ptr, "funcname")

C++ (yoba-module.so):
link yoba.so
this_cpp_interpreter_ptr->getCallback("funcname")();

С++ (yoba.so):
...возвращаемся сюда

И ещё вопрос - если все эти либы оптимизированы компилятором, будет ли значительный оверхед из-за таких кросс вызовов, от чего это зависит?
958281960319
#522 #958281
>>958226
http://stackoverflow.com/questions/9456635/effect-of-dll-to-execution-speed

Вот здесь пишут, что оверхед небольшой, но, я, в принципе, тоже так считаю. Если ты делаешь подключение библиотеки как плагина, то потребуется время на загрузку либы и разбор таблицы символов в писках экспортируемых функций. А так, во время работы это не чувствуется (сам плагинами трюками пользуюсь уже давно и все заебись пока что)
#523 #958448
>>957921

1) Скачиваешь Qt для MinGW - внутри динамический Qt, MinGW и Qt Creator. Ставишь.
2) Указываешь в Xcode путь к MinGW (сам гугли).
3) Смотришь в документации, как пользоваться Qt через qmake и moc (емнип, moc вызывается qmake-ом). Воспроизводишь эту последовательность через настройки сборки в Xcode.

Готово!
#524 #958462
>>957921

Ой, забыл.

4) Добавляешь пути к либам и инклудам Qt (и MinGW, если Xcode не допедрит сам).
958931
#525 #958463
>>958088

>Правильный ли тип для указателя?



Нет. Правильный - unitptr_t.
958626
#526 #958626
>>958463

То есть, uintptr_t
#527 #958713
Сап, двачеры. Начал изучать плюсы, но понял, что одним чтением книжек делу не поможешь, инфа тупо не держится в голове. Нужно кодить. А чтобы кодить - нужно как-то этому учиться. Где можно взять исходники небольших проектов, в которых был бы хороший код, чтобы по нему учиться понимания работы с языком? Все, что встречал - либо огромные проекты, в которых хрен разберешься с моим то опытом, либо откровенный говнокод.
958828
#528 #958775
>>956661
Бамп
#529 #958828
>>958713
Боюсь что так тоже не выйдет.
Ты хочешь от чтения книг, в которых тебе объясняют каждую строчку по целой странице, а то и больше, перейти к чтению кода, в котором, если повезет, на половину строчек будут небольшие комментарии.
Почему сам не попробуешь написать что-то. Придумай себе задачу, сделать простенькое приложение и начни пилить, пользуясь гуглом и прочими форумами, АИБами.
#530 #958911
>>956661

>Так вот, вопрос: можно ли это сделать как-то компактнее?



Пиздец. Вариантов ажно три:
- пиши нулевой байт в конце строки
- пиши байт длины строки в начале строки. Если нужно хранить длинные строки и хочется больше места, можешь писать блоками по 255 символов: если длина строки 255, то после блока пишешь байт 0 - типа, строка закончилась, а во время чтения проверяешь байт, следующий за блоком - если 0, то строка кончилась и нужно начинать следующую
- operator<< и operator>> блядь. Эти бро запишут всю твою структуру строк вместе с их числом и коректно прочитают.

Писать битовые маски - уродский вариант.
#531 #958931
>>958462
Спасибо. А плагинов для дизайна форм в XCode нет? Или можно импортировать ui-файлы из QtCreator?
958959
#532 #958959
>>958931

Никогда не использовал Xcode, плагины можешь сам поискать, .ui-файлы наверняка специфичны для Qt.
#533 #958966
>>956661
Байтовые строки - что это еще за зверь такой?
Если хранишь именно текстовые строки - просто раздели строки с помощью "\n", в с++ есть методы чтения строчек из текстового файла.
Если хранишь бинарные данные произвольной длинны - то самый простой варик - это писать в файл byte или int с размером строки, а следом - сами байты строки, потом опять размер строки и байты и тд.
Но в таком случае у тебя будут проблемы с произвольным доступом к строкам - ты не сможешь найти строчку с индексом i, не пройдясь по всему файлу.

Если похуй и загружаешь всё целиком - можешь так и оставить, если нужен произвольный доступ - то пишешь в начало файла индекс-данные, например так (псевдокод):
int count; //количество строк.
[
{
int id; //номер строчки
int64 offset; //offset начала строки
int size; //длина строки в байтах
}
]

После этого ты можешь читать только индекс, а потом скипать файл до нужного offset.
#534 #958976
>>951262
а ты уверен, что в этом консольном шрифте есть японские символы? менять пробовал?
#535 #959057
Сап, плюсаны. Поясните за goto, почему это табу?
959063959114959216
#536 #959063
>>959057
Потому что ебланы не умеют пользоваться goto и засрут им весь код.

Если хочешь сделать что-то типа goto end, лучше сделай так

do {
stmt_1;
if (expr) {
break;
}

stmt_2;
} while (false);

end_stmt;

Или можешь использовать идиому Guard
#537 #959114
>>959057
Это табу для новичков. Для сильных разрабов это еще один инструмент, который имеет свои применения. А дебил его просто повсюду будет пихать и дебажить потом до тепловой смерти вселенной
#538 #959183
Аноны, поясните причины срача по поводу табов и пробелов. Какая, нахуй, разница?
959216959221961418
#539 #959216
>>959057

Потому что иногда код надо поддерживать и иногда он сложный. Найти ошибку в коде с goto может быть очень сложно.

>>959183
Синдром утёнка либо поддержка однообразия в коде. Первое - диагноз, второе - в какой-то мере важно и нужно.
#540 #959221
>>959183
Всё просто - табы в разных редакторах по-разному отображается.
#541 #959350
Аноны, совет надо.
Нужен контейнер под набор данных.
Набор содержит, положим, 6 полей(?), 10000 единиц хранения, например:
1) int 2) int 3) int 4) string 5) string 6) string.
По отдельности одинаковые 1, и 2, и 3 могут встречаться во всём наборе не по разу, но вот совокупность 1 и 2 даёт уникальный поднабор данных (например 10 единиц хранения), а совокупности 2 и 3, или 1 и 2 дают уникальную единицу хранения.
То есть, эдакий составной ключ. Обращаться я хочу как к уникальной какой-то единице, так и к поднабору (те самые 10 единиц из 10000).
Менять уникальные единицы не планирую. Т.е. только вставить, прочитать, удалить.
Вот каким это контейнером (контейнером же?) это лучше реализовать, не перебирать же все значения.
Из идей у меня
std::unordered_multiset<int, int, int, std:string, std:string, std:string>globMultiset;
Предполагал, что получится фигня, фигня и получается.
Или мне что-то со struct надо придумать?

Фактическая идея - таблица с составными ключами по типу как у БД.
961971
#542 #959365
Аноны, объясните, что такого плохого в передаче временного объекта в качестве аргумента по non-const ссылке, что это запрещено стандартом?

И что делать с неиспользуемыми output-параметрами функций из сторонних библиотек и legacy-кода? Код типа:
int unused_param = 0;
do_a_barrel_roll(foo, bar, unused_param);
выглядит топорно, есть ли какие-то изящные решения? Wrapper-ы под каждую такую функцию писать, что ли?
959443
#543 #959443
>>959365
Это наверное следствие из того что на временные объекты нельзя объявлять не конст ссылки, так как объект может быть уничтожен в любой момент и такая ссылка не имеет смысла. А при объявлении константной ссылки время жизни временного объекта продлевается до времени жизни ссылки.
5 Кб, 306x48
#544 #959540
Может всё-таки есть потайной способ сделать
A x1 = B()
B x2 = dynamic_cast<B>(x1)
чтобы не возиться с кучей? Я не могу размещать все объекты в куче, потому что придётся реализовывать сборщик мусора

На ум приходит
shared_ptr<A> x1(new B)
shared_ptr<B> x2 = dynamic_pointer_cast<B>(x1);
но невозможно же по всему коду такие конструкции писать, можно как-то упростить через перегрузку оператора= или вроде того?

Конструкция на картинке компилится, но x2 считается чистым объектом A, виртуальные методы не работают
959666959704
#545 #959544
>>957921
Чем тебе QtCreator не угодил? Это единственная кросс-платформенная и полноценная альтернатива студии, я его давно использую без всякого Qt, а для разработки на Qt это очевидно лучший инструмент. Система сборки - CMake (стандартная QMake слишком примитивная). Можно подключить плагины вроде обычных вкладок и разные анализаторы кода на лету.
959555
#546 #959555
>>959544

> Это единственная кросс-платформенная и полноценная альтернатива студии


Полнейшая кросс-платформенная альтернатива студии - clion. По сравнению с ним QtCreator и рядом не стоял
Хотя в целом он неплох
959588
#547 #959588
>>959555

>JetBrains


Если уж использовать графические приложения на джаве, то и писать лучше на ней, чтобы не расставаться со сборщиком мусора в анусе и занимать всю доступную память, Eclipse/NetBeans туда же.

Кстати есть ещё навороченный KDevelop, но он тащит с собой KDE либы на 300 мб и соответственно отрисовывается на них, выглядит абсолютно чужеродным вне KDE окружения. Зато подсвечивает и выводит подробный тултип чуть ли не на каждый символ в коде, раскрывает макросы, автодополнение на том же уровне. Использует файлы CMake как проект и лучше всех работает с ними. Должен хорошо работать с Qt, так как сам по сути на нём написан.
#548 #959666
>>959540
что ты сделать то хочешь?
959702
148 Кб, 833x519
#549 #959702
>>959666
Наследовать Scalar и Array от одного класса Variable и возвращать Variable из функций. Почему полиморфизм на стеке невозможен?
960419
#550 #959704
>>959540

>shared_ptr<B> x2 = dynamic_pointer_cast<B>(x1);



Что ты делаешь, блядь.

shared_ptr<B> x2 = x1;
B &x3 = x1;
Слабо штоле?

>A x1 = B()


>B x2 = dynamic_cast<B>(x1)



Боже....

B &x2 = B();
A &x3 = B();

Виртуальные деструкторы не забудь только.
959719959720
#551 #959719
>>959704
B &x2 = B();
И куда ссылка указывать должна?
959836
#552 #959720
>>959704
Собственно весь твой код не компилится. Либо ты наркоман, либо пишешь на С++22.
959836
#553 #959729
Как отключить код дисассемблера в qt creator в режиме дебага?
#554 #959730
>>959729
Двачую этого, пиздец как бесит
959732
#555 #959732
>>959730
Я уже всё перерыл в интернете и ничего не нашёл на этот счёт, а то что нашёл не помогло. Сам gdb показывает C++ код, но вот ёбаный qt creator показывает его дизассемблированным.
959847
#556 #959740
>>959729
Так же, как включить табы.
#557 #959765
>>959729
Ты точно в Debug конпилируешь? Убедись что в выхлопе конпеляции есть флаг -g для GCC. Ассемблер он отображает когда эксешник/либа собрана без debug-символов и с оптимизацией. Никогда такой проблемы не было, собственно именно в креаторе я в своё время познакомился с GDB, стало круто сегфолты искать.
959768
#558 #959768
>>959765
В режиме Debug компилирую. Где смотреть выхлоп компиляции?
959772
#559 #959772
>>959768
Compile Output, должен быть флаг -g и не должно быть -О2
Можешь ещё написать QMAKE_CXX или просто CXX (не помню) = g++ -g чтобы наверняка
959776
#560 #959776
>>959772
Всё нормально с флагами компиляции, и в QMAKE_CXXFLAGS я их тоже дописал чтобы наверняка, всё равно не помогает.

> g++ -c -pipe -g -O0 -g -Wall -W -D_REENTRANT -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../untitled -I. -isystem /usr/include/qt -isystem /usr/include/qt/QtWidgets -isystem /usr/include/qt/QtGui -isystem /usr/include/qt/QtCore -I. -isystem /usr/include/libdrm -I/usr/lib/qt/mkspecs/linux-g++ -o main.o ../main.cpp


> g++ -o untitled main.o -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread

959790
#561 #959790
>>959776
То есть gdb untitled у тебя в штатном режиме работает? Тогда не представляю в чём проблема, если он отображает ассемблер, значит видит GDB, а если видит, то должен отображать то же самое.
Я бы ещё удалил .pro.user и открыл проект заново для переконфигурации, проверил и поменял какие-нибудь параметры
959799
#562 #959799
>>959790
Да я уже всё перепробовал, я сегодня весь день на это потратил.
#563 #959836
>>959719

Так, падажжи. Тогда B &&x2 = B(); - ссылка на rvalue.

>>959720
Телепаты в отпуске, УМВР.

http://ideone.com/V8dwB1
#564 #959838
>>959729

Только что запустил - УМВР. КОгда дебужил релизный код - видел ассемблер, и когда ты будешь в функции без символьной инфы попадать, тоже будет ассемблер.
#565 #959844
Что делать если в исключение нужно много данных засунуть? Писать throw exception(arg1, arg2, arg3, arg4, arg5, arg5) или

Exception e;
e.arg1=...
e.arg2=...
...
throw e;

никогда не встречал вторую конструкцию.
959935
10 Кб, 484x158
#566 #959847
>>959732
А сюда жмакал?
959849
#567 #959849
>>959847
Да, я куда только уже не жмакал.
#568 #959935
>>959844
struct ZALUPA {
....T1 a1;
....T2 a2;
}

try {
....throw Zalupa{ 1,2 };
} catch(const Zalupa& z) {
....// do something
}
#569 #960277
Аноны, что такое предкомплированный заголовок в вижуалке и нахуй он нужен? Почему ничего подобного нет в gcc/clang по крайней мере я не нашёл?
960289960413
#570 #960289
>>960277
Не нужно, если у тебя нет буста едущем на бусте
#571 #960317
А есть здесь ещё кто с проблемой Qt creator когда он показывает только код дизассемблера? Можете сказать свою систему и версию Qt?
87 Кб, 939x584
#572 #960319
>>958226
Наконец-то осилил вызов С++ функций из скрипта. Создаём для скрипта функцию, например YobaPerl::test, она вызывает С++ функцию из небольшой либы-моста, та в свою очередь достаёт из таблицы символов интерпретатора указатель на С++ обёртку вокруг него и делает с ним что угодно. Достать из стека интерпретатора аргументы функции и засунуть обратно результаты не проблема.
Эффективности должно быть достаточно для использования в игровом движке например, по-моему до меня с Perl никто такого не делал.

Пример:
// C++
perl.set_callback("func_name", [](Array args) -> Array { ... });
// Perl
@results = YobaPerl::call("func_name", ...)

И всё работает максимально быстро, проблема только с поиском коллбека по имени, но по-другому похоже не сделать никак
960348
#573 #960347
А возможно создать вектор, единственным элементом которого будет массив байт?
960356
#574 #960348
>>960319
Я тебя боюсь.
#575 #960356
>>960347
std::vector<std::array<T, N>>
да, но зачем?
960362
#576 #960362
>>960356
Ответ http запроса должен помещаться в массив байт, который является единственным элементом вектора. Задание такое)
960378
#577 #960378
>>960362
Мне кажется, ты всё слишком буквально воспринимаешь.
#578 #960413
>>960277
Если у тебя дохуя хидеров, которые нужны_везде, то ты делаешь предкомпилированый заголовочный файл и включаешь его везде. Компилятор вместо того чтобы парсить этот хидер берёт предкомпилированный бинарь и читает его. Что существенно быстрее.

Короче - для говнокодеров, которые не умеют форвард декларации и приватную имплементацию. Пидрильный код, пропагандируемый мелкомягкими.

И да, в шланге и гцц оно есть. гугли gcc/clang pch
960435
#579 #960419
>>959702
Потому что полиморфизм предполагает разные объекты, т.е. разные размеры. А не стеке не может лежать что-то неопределённого в момент компиляции размера.
Это же ж очевидно.
#580 #960428
Чому в хеадерах нельзя прописывать имплементацию?
960435
#581 #960435
>>960428

Можно. Хеадеры и сурсы ничем не отличаются - и то, и другое можно скомпилировать и инклудить.

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

см. >>960413
#582 #960441
Теперь поясните как сделать unordered_map<string, function> с разными функциями, опять невозможно?
960503960584960589
#583 #960503
>>960441
Никак. Энджой ойр СТАТИЧЕСКАЯ ТИПИЗАЦИЯ. Если ты современный объектно-ориентированный парень то можешь почитать про ШАБЛОН ПРОЕКТИРОВАНИЯ КОМАНДА.
1412 Кб, 1600x2397
#584 #960541
Есть такой CMakeLists.txt. Его написал я в отдельное директории проекта библиотеки чтобы скомпилировать имеющиеся в проекте штатные Сишные биндинги от питона к С++ коду проекта. (Чтобы потом использовать эту библиотеку из более нрмальных языков.)

[code]
cmake_minimum_required(VERSION 2.8)

project(CCoda)

set(CMAKE_BUILD_TYPE Release)

file(GLOB python_binding_src "../src/nlp-stack//PythonExtension.cpp")
file(GLOB python_binding_h "../src/nlp-stack/
/PythonExtension.h")

file(GLOB_RECURSE all_h "../src/nlp-stack//.h")

add_library(ccoda SHARED ${all_h} ${python_binding_h} ${python_binding_src})
[/code]

Почему-то эта cmake-параша не видет .h файлы, жалуясь после cmake . && make:

[code]
$ make
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxx/Fitness_Bot/Coda/c_interface
Scanning dependencies of target ccoda
[ 20%] Building CXX object CMakeFiles/ccoda.dir/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.cpp.o
In file included from /home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.cpp:1:0:
/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.h:3:33: fatal error: DictionaryInterface.h: Нет такого файла или каталога
#include "DictionaryInterface.h"
^
compilation terminated.
CMakeFiles/ccoda.dir/build.make:62: ошибка выполнения рецепта для цели «CMakeFiles/ccoda.dir/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.cpp.o»
make[2]: [CMakeFiles/ccoda.dir/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.cpp.o] Ошибка 1
CMakeFiles/Makefile2:67: ошибка выполнения рецепта для цели «CMakeFiles/ccoda.dir/all»
make[1]:
[CMakeFiles/ccoda.dir/all] Ошибка 2
Makefile:83: ошибка выполнения рецепта для цели «all»
make: * [all] Ошибка 2
[/code]

Хотя в переменных этот файл есть, и grep говорит что он там:
[code]
$ grep -r DictionaryInterface.h .
./CMakeFiles/ccoda.dir/CXX.includecache:DictionaryInterface.h
./CMakeFiles/ccoda.dir/CXX.includecache:/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/DictionaryInterface.h
[/code]

Помогите побороть эту залупу!
1412 Кб, 1600x2397
#584 #960541
Есть такой CMakeLists.txt. Его написал я в отдельное директории проекта библиотеки чтобы скомпилировать имеющиеся в проекте штатные Сишные биндинги от питона к С++ коду проекта. (Чтобы потом использовать эту библиотеку из более нрмальных языков.)

[code]
cmake_minimum_required(VERSION 2.8)

project(CCoda)

set(CMAKE_BUILD_TYPE Release)

file(GLOB python_binding_src "../src/nlp-stack//PythonExtension.cpp")
file(GLOB python_binding_h "../src/nlp-stack/
/PythonExtension.h")

file(GLOB_RECURSE all_h "../src/nlp-stack//.h")

add_library(ccoda SHARED ${all_h} ${python_binding_h} ${python_binding_src})
[/code]

Почему-то эта cmake-параша не видет .h файлы, жалуясь после cmake . && make:

[code]
$ make
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxx/Fitness_Bot/Coda/c_interface
Scanning dependencies of target ccoda
[ 20%] Building CXX object CMakeFiles/ccoda.dir/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.cpp.o
In file included from /home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.cpp:1:0:
/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.h:3:33: fatal error: DictionaryInterface.h: Нет такого файла или каталога
#include "DictionaryInterface.h"
^
compilation terminated.
CMakeFiles/ccoda.dir/build.make:62: ошибка выполнения рецепта для цели «CMakeFiles/ccoda.dir/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.cpp.o»
make[2]: [CMakeFiles/ccoda.dir/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/PythonExtension.cpp.o] Ошибка 1
CMakeFiles/Makefile2:67: ошибка выполнения рецепта для цели «CMakeFiles/ccoda.dir/all»
make[1]:
[CMakeFiles/ccoda.dir/all] Ошибка 2
Makefile:83: ошибка выполнения рецепта для цели «all»
make: * [all] Ошибка 2
[/code]

Хотя в переменных этот файл есть, и grep говорит что он там:
[code]
$ grep -r DictionaryInterface.h .
./CMakeFiles/ccoda.dir/CXX.includecache:DictionaryInterface.h
./CMakeFiles/ccoda.dir/CXX.includecache:/home/xxx/Fitness_Bot/Coda/src/nlp-stack/Dictionary/DictionaryInterface.h
[/code]

Помогите побороть эту залупу!
960543960590
#585 #960543
>>960541
макаба сожрала что-то, возможно. Вот код

http://pastebin.com/v2ZW2edn
#586 #960574
Doxygen кто-нибудь использует в qtcreator? Или любой другой способ создания тултипа из коммента около класса/функции
960673
#587 #960576
Привет посоны, написал лучший код в своей жизни.
http://pastebin.com/XBg4RiE0 - рейт

В чем идея - есть мини-консолька, и хотелось сделать автовывод всех типов и их количества для коллбэков, чтобы новые команды в консольку добавлять просто как пара "строка - указатель на функцию". А конвертация типов из строк и прочее - было автоматически. И мне это удалось.

Работает на g++ 5.4 и студии 2015
960596960700
#588 #960584
>>960441
http://www.cplusplus.com/reference/functional/function/

Ты про этот function? Что значит "разные функции"?
960589
#589 #960589
>>960584
Ну просто разные. Открываешь любой заголовочный файл и вырываешь оттуда любые функции.
>>960441
Самое лучшее, что можно сделать без существенных усилий:
http://stackoverflow.com/a/19473438/6889930

Для этого нужно, чтобы у функций одинаковая структура была. Может кому-нибудь и такой вариант пригодится.
960594960629960700
#590 #960590
>>960541
разобрался, отбой

пиздец С++ для отбитых уёбков
#591 #960594
>>960589
std::tuple из пар строка-функция и обход ее.
960595
#592 #960595
>>960594
Ну-ка, налабай. Не вижу причин, почему это должно рабоать.
960596
#593 #960596
>>960595
Посмотри сюда >>960576
960599960601
#594 #960599
>>960596
Сможешь что-то, кроме void, вернуть?
#595 #960601
>>960596
смогу, еще 1 тимплитный параметр и вперед. Но мне это не нужно было.
960602
#596 #960602
>>960601
Ну вот конвертер под каждый тип аргумента - это уже перебор. Скорее всего, этот код без задач.
960604
#597 #960604
>>960602
а как ты предлагаешь строки из ввода конвертировать в нужные аргументы для функции? Тебе все равно придется это делать.
960616
#598 #960616
>>960604
А, я вижу. Я просто смотрел на код из контекста прошлой задачи с мапом. У тебя тут целый скриптовый движок.
Ты сможешь переделать это всё под ту задачу? Просто хранить разные функции в мапе? То есть просто нужно, чтобы я по имени функции мог получить указатель на эту функцию или экземпляр function.
960619
#599 #960619
>>960616
У меня разные типы хранятся. В варианте мапе - кроме полиморфизма и ручного реинтерпрет-кастинга мне ничего в голову не приходит.
960622
#600 #960622
>>960619
Впрочем, это тоже задача без задач. Хз, как потом эти функции вызывать. Тоже придётся не одну сотню строк написать. Пока не завезут reflection, проще про это забыть.
#601 #960629
>>960589
Да я надумал просто сделать
unordered_map<string, function<A(B)> a
unordered_map<string, function<B(C)> b
и не возиться с этим
960663
#602 #960663
>>960629
В c++17 variant завезли, можешь уже попробовать, в принципе. Только нужно будет задать типы используемых функций сначала.
73 Кб, 979x659
#603 #960673
>>960574
Пока копался, нашёл doxywizard - божественная штука, через десятки опций конфига может сгенерировать HTML документацию с навигацией из любого набора файлов с даже не документированным кодом, в общем всё очень просто. Поддержка формата qthelp встроена в doxygen, осталось разобраться как в креатор её запихнуть.
#604 #960700
>>960576

Если не считать того, что ты пытаешься обойти одно из главных достоинств плюсов - очень интересно. Интересно, зачем это вообще может понадобиться.

>>960589

>Ну просто разные. Открываешь любой заголовочный файл и вырываешь оттуда любые функции.



Что ты собираешься делать с этими разными функциями? Если ты кастуешь их не в тот тип, который им принадлежит, ты получаешь UB. Тебе нужен UB?

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

>>960589

>Самое лучшее, что можно сделать без существенных усилий:



Это и есть существенные усилия. Ты нагромоздил гору темплейтов ради статической проверки существования конвертеров для всех fn::функций. Можно было бы сделать всё то же самое без темплейтов.
960758960762
#605 #960758
>>960700

>Это и есть существенные усилия. Ты нагромоздил гору темплейтов ради статической проверки существования конвертеров для всех fn::функций. Можно было бы сделать всё то же самое без темплейтов.



Я не тот анон. В той ссылке что-то уровня map<string, function <void()> >, 10 строк кода.

>Что ты собираешься делать с этими разными функциями? Если ты кастуешь их не в тот тип, который им принадлежит, ты получаешь UB. Тебе нужен UB?



Ничего. Я пытался найти решение этой задачи для другого анона just for lulz. Но потом понял, что ничего не могу в итоге с этим мапом делать.
#606 #960762
>>960700
А я тот анон

>Если не считать того, что ты пытаешься обойти одно из главных достоинств плюсов - очень интересно. Интересно, зачем это вообще может понадобиться.


Как раз, я пользуюсь информациями о типах,
и красиво их конверчу. Практического смысла, кроме как "Смотрите как я могу", тут правда нет, но тем не менее, имхо, я сделал охуенно.
10 Кб, 502x50
15 Кб, 589x106
#607 #961145
Ребята, скорее всего говнокодю, но где ошибка?
961198
#608 #961198
>>961145
открыть ман и посмотреть, что последний аргумент является int'ом, а не указателем не позволяет религия?
961238961243961251
#609 #961238
>>961198
Так в том то и дело, никаких указателей на int нет, мильен раз уже проверял
#610 #961243
>>961198
Ой, прошу прощения, поторопился с ответом, уже понял)
#611 #961251
>>961198
Хотя все равно не работает, теперь пишет наоборот invalid conversion from 'int' to 'int*'
961257
#612 #961257
>>961251
ты ебанько чтоли?
Убери "&" от последнего аргумента
961281961285
#613 #961281
>>961257
ебанько ты, я умею читать, а ты похоже нет, убрал, ошибка была invalid conversation from 'int' to 'int'
А теперь ошибка invalid conversation from 'int' to 'int
'
#614 #961285
>>961257
короче наоборот from 'int' to 'int*', я хз че в предыдущем комменте звездочки убрались
#615 #961418
>>959183

> Какая, нахуй, разница?


Табы для отступов, пробелы для форматирования. Всё просто.
#616 #961498
Попросили сделать C api в нашей крестовой поделке. Что будет с вызывающей нас по этому апи программой если мы выкинем исключение?
961501
#617 #961501
>>961498
Возьми и проверь.

Вообще должно быть похуй через какой API ты дошёл до места, которое выбросило исключение.
961588
#618 #961588
>>961501
Упадёт, т.к. исключение не будет перехвачено.
961688961814
#619 #961664
Что делать при циклических зависимостях?
961665
#620 #961665
>>961664
forward declaration. И всегда стараться инклюдить хедеры своего проекта только в ccp файлах. Иногда может не помочь - тогда ты соснул и нужно что-то менять. Например если ты допустил такую вещь как:

class A {
B b
}:

class B {
A a;
}
961668
#621 #961668
>>961665
А есть ли какие-нибудь ещё варианты помимо уродливого forward declaration? Может быть паттерны какие или ещё что? У меня почти то-же самое что ты привёл в примере, причём с подобным я сталкиваюсь уже не впервые... Что можно у меня поменять я не знаю т.к. я относительно недавно в программировании...
961680
#622 #961680
>>961668
Enjoy пердольные кресты. По идее - если у тебя циклические зависимости - то ты что-то делаешь не так
961681
#623 #961681
>>961680
Ну я пытаюсь разделить свою gui программу на классы, в главном классе что является главным окном я создаю экземпляры моих классов с другими окнами, которым через конструктор я передаю указатель на главное окно. По идее я могу не разделять программу на классы и всё делать в одном, но исходный код с несколькими тысячами строк кода как мне кажется будет не очень хорошей идеей. Может кто что подсказать по этому поводу?
961684
#624 #961684
>>961681
гугли идиому pImpl
#625 #961688
>>961588
так перехвати
#626 #961814
>>961588
try {
// вот тут въебал код, который бросит хуй знает что надеюсь, это будет не указатель
} catch (...) { // вот это означает, что будет перехвачено ЛЮБОЕ исключение, не перехваченное ранее
aa_blya_pizdos_flag = true;
}
#627 #961840
962615
#629 #962615
>>961840
Нормальную ссылку давай, заебал, я на pm сижу >>961839 (OP)
#630 #963224
Как узнать, что программа win32 запущена через дебаггер не в IDE, а в софте типа ollydbg?
966908
#631 #966594
>>952457
Отличная либа для кроссплатформенной разработки.
ASIO - сеть, сокеты, вроде в файлы можно записывать.
filesystem - работа с путями
property_tree - парсинг XML, INI, JSON.
#633 #977651
>>961971
Хм, не один я костылю, значит, с хэшами.
Тред утонул или удален.
Это копия, сохраненная 24 мая 2017 года.

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

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