Анончики, подскажите какой-то более-менее большой проект, который можно реализовать в соло за 2-3 месяца всё лето свободен на С++/Qt. До этого чего-то серьёзного не писал, какие-то калькуляторы, шахматы и обработчики данных еще пару ботов для телеграма. Сейчас чувствую что очень не хватает практики, особенно современных крестов. С матаном/линалом знаком, дискретка на базе первого курса. Было бы очень неплохо, если бы проект был связан с компьютерными сетями и протоколами передачи данных
>>1401558 Бля, видел в треде идей анона, но чёт даже не подумал об этом. Спасибо анончик. >>1401583 - над этим подумаю, но сама задача какая-то не очень интересная по крайней мере для меня.
>>1401309 (OP) Ребята я давно не спал и плохо говорить по-русски, но по другому я не могу. Я пишу some shitty code в IDE MS Visual Studio 2015, мне нужно чтобы когда я подгружаю в DataGridView свои данные из разных таблиц БД, этот элемент не менял свои размеры, нужно чтобы ширана столбцов растягивалась или сужалась но в совокупности всегда была одна ширина элемента. На текст в таблице не обращайте внимания это рыба.
Пример, пик1. Все заебись, таблица ровно такого размера как надо.
Пик 2. По ширине пиздец, таблица уменьшилась. На высоту похуй.
Я пробовал играться с автосайзом для строк и столбцов, а также принудительно ставить размеры элемента после подгрузки -- толку 0.
>>1402366 Пишу я на C++ обычно в консоли с чистым CLI компилируя gcc, тут же доебались со своим интерфейсом и загнали в студию от мелкомягких. Писать интерфейс я привык в Delphi от еще борланда и это нечто от редмонда вызывает у меня растерянность и сонливость.
Я даун и прошу помощи. Такая задача. Узел списка Комната с член-данными ширина (float), длина (double) и цвет стен (char *). Реализовать член-функцию «получение элемента с заданным порядковым номером»
Я бы хотел добротно заплатить тому, кто мне поможет, но так как я нищий и на 1к рублей мне жить еще месяц, могу лишь закинуть 50 рублей, только прикрепите сразу свой кошель в ответу, чтоб я левым людям не кинул. пикрандом
>>1402523 В односвязном списке по определению же у каждого элемента есть указатель на следующий элемент. https://prog-cpp.ru/data-ols/ Тут описано, как инициализировать и выводить все элементы, если тебе нужен конкретный, просто сделай цикл for(в теле цикла переход через указатели от элемента к элементу), пока не дойдет до элемента с нужным номером, и потом выведешь значения, на которые указывает полученный указатель.
>>1402679 Уже качаю полную студию, 5 гигабайт. Еле сдерживаюсь, чтоб не побежать в город обзывать каждого первого потребителя продукции МенструалсофтКорпорейшн говноедом и получать за это пизды. Это ж как, сука, надо смерти не бояться, чтоб не выпускать инструменты без IDE отдельным релизом.
Посоны, не гоните, просто не сталкивался с такими кейзами. Есть мой собственный класс, нужно по входным данным динамически создавать представителей этого класса, потом загонять их в массив и работать с ними. Как это реализуется?
>>1402724 >Нахуя можно Постановка вопроса наивная, пиши прямо -- "нахуя нужно". >приватныевиртуальные функции при наследовании Имеется в виду нечто с комплексной характеристикой, "грубо говоря" свойства перечисляются. Что же, начнем читать как компилятор "с лево на право" попутно выстраивая собственный комплексный ответ >при наследовании Очевидно речь идет о ООП, какое именно наследование не указано, тогда берем самый простой "публичный одиночный" вариант, таким образом что - то закладывается в описание класса, дабы иметь возможность унаследовать сие в потомках данного СК. >виртуальные функции Опять же, ЭМНИП, используются для явного указания компилятору необходиомсти вызова тех или иных функций относящихся к тем или иным классам при преобладании ссылок. Что очень кстати при наследовании методов. >приватные Ну, а, собственно, с хуя ли, у нас, в ООП, должны, появляться функции, работающие с датой экземпляра класса напрямую, при этом, не являющимися приватными ? Опять же стоит учитывать особенности наследования.
В общем - то, нужно это все, как и все остальное в языках, в т.ч объектно ориентированных, дабы ты мог описать решение конкретной, иногда достаточно специфичной , задачи на пальцах компьютеру. Задачи, в которых релевантно использование ООП в целом, как - правило, имеют те или иные нотации в отношении того что должно наследоваться, куда, как работать в связке/ссылке на объекты в т.ч иных и родственных классов, вот для того чтобы полно описать решение, язык предоставляет соответсвующие способности.
У меня в VS при объявлении шаблонного типа переменной (template<class T>) ошибка 1>MSVCRTD.lib(exe_main.obj) : error LNK2019: ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 1>C:\Users\sudo\source\repos\Множества символов\Debug\Множества символов.exe : fatal error LNK1120: неразрешенных внешних элементов: 1 Как исправить?
>>1402724 >Нахуя можно делать приватные виртуальные функции при наследовании? герб саттер "новые сложные задачи на с++", задача 18 детальный ответ на твой вопрос если кратко - есть способы проектирования архитектуры приложения, когда вообще нет открытых виртуальных функций, такой подход сохраняет популярность
>>1402940 Откуда динамический массив будет узнавать насколько ему расширяться, если ты ему не предоставляешь конкретное число, получаемое прямо во время работы программы?
Нет, ну так-то он прав. C++ это либо легаси, либо рокет саенс. Но рокет саенсом занимаются единицы из сотен тысяч, а остальные поддерживают какое-нибудь старье, написанное еще в то время, когда C# и Java не доминировали бэкенд и десктоп. Тем более когда джунам за JS или тот же Go платят больше, чем за C++ мидлу.
>>1402714 Мне надо скомпилировать код, использующий библиотеку, которая в свою очередь скомпилировано майкрософтовским компилятором. Ставить для этого Шиндовз10 с .NET Framework 4.6 как-то неохото. Я вообще ни шага в разребании этой задачи не могу сделать, не пробубнев четырежды "виндоюзеры говноеды".
Возможно ли как-то при выполнении определённого условия просто в условии объявить переменную типа, который задаёт условие, и использовать эту переменную дальше в программе? А то они обозначаются как локальные и приходится код копипастом растягивать.
>>1403171 Это то, что твои пальцы должны набрать в гугле перед тем, как пойти нахуй, долбоёб. пиздец, при поиске ответа на вопрос не использовать гугл как первую инстанцию. выпились
>>1402922 Можно считывать данные посимвольно и каждый шаг расширять массив на 1 элементбудет выдяляться новыц массив нужной длины и туда будет уопироваться содержимое старого - такое себе.занятие Можно выделять память блоками по 256 байт например. А потом еще можно обрезать. А можно не обрезать, если тебе памяти жалко.
>>1403180 Может потому что glut уже лет двадцать не поддерживается? Или потому что это ОТДЕЛЬНАЯ БЛЯДЬ БИБЛИОТЕКА? Где ты вообще откопал код, который юзает glut? Ты хочешь буквы рисовать?
>>1403195 Он хоть и грубый, но я с ним согласен. Тебе прямо сказали что надо гуглить, и ты вместо гугла задал вопрос анону. Даже если не брать во внимание саму тупость этой ситуации, как думаешь, кто тебе быстрее ответит - гугл или анон?
>>1403193 >Где ты вообще откопал код, который юзает glut? Статья на хабре... 2011 года. Не обратил внимания на дату. Как я понял, сейчас вместо glut юзают freeglut, так? Мне нужно его самостоятельно собрать? https://habr.com/ru/post/111175/
Здрасте, можете пояснить за tls1.3, публичный, приватный и CA сертификаты, откуда они берутся, и что надо иметь клиенту, чтобы взаимодействовать с сервером?
БЛЯДЬ, ПОМОГИТЕ ДЕЛЬФИНИСТУ В СТУДИИ ОТ МЕЛКОМЯГКИХ.
Какого блядь хуя ей надо - то, а ? В Delphi я спокойно могу из одной формы, например, ебануть visible другой формы. Forname.visible ... траляля. Здесь же, сука, нихуя не получается, это говно ноет и срет ошибками. Как мне их одной формы убить другую, изменить что - то хотя бы
>>1403703 Вот сука, банально блядь. Как же в этой ссаной студии все через депу сделано сука. Берем елемент нейм, хуяим ему метод- событие. Переименовываем элемент нейм. А событие так и останется с прошлым именем. Вот блядь, какой даун это придумол сука.
>>1403704 С этими же формами. Какого хуя у меня в таком хуевом object basic это делается одной строчкой, а здесь я должен гуглить, объявлять их друг у друга, ебаться с сылками и статичностью.
https://pastebin.com/hNBif4t1 пытаюсь умножить матрицы используя многопоточность,почему так медленно или так должно быть.При размерности 1к обычное умножение занимает примерно 0,1 миллисекунду,а многопоточное около 250мс(если я время правильно засекаю)
Поясните, есть такой код: std::for_each(iter.begin(), iter.end(), [] (auto element) { ...element... }); При этом в лямбде сам элемент, а как использовать не элемент, а его итератор?
Поясните, если мне нужен контейнер который на 99% совпадает со стандартным, только с заменой одной функции или алгоритма, то как лучше поступить? Скопировать из stl нужный кусок и назвать его my_contaeiner1(new container)?
>>1403878 зачастую оказывается достаточно написать обобщенную свободную функцию, которая принимает итераторы, что поддерживает этот контейнер и все напишешь что за функционал тебе нужен, может напишу и требуемую функцию а вообще от контейнеров не наследуются, а агрегируют их а делать как ты предлагаешь - вообще нехорошо
как можно получить символ юникода в std::wstring зная его код. Пример: Надо получить std::wstring res = "血"; Имеется: std::wstring test = "8840" - юникод японского символа. создать его из двух строк "\u" + "8840" нельзя, на стэк оверфлоу есть тема: https://stackoverflow.com/questions/47915811/c-adding-u-to-string
Есть ли способы создания символов динамически? Или как я могу еще преобразовать его в эту залупу 血?
я дак бы не успел за 3 дня пул памяти написать, даже если делать в си-стиле, типа как в apr сделано или у сысоева в энжинх, а если еще и делать чтобы под кресты он ложился, типа как в boost::pool, там еще больше работы
>>1404271 Покажи, где снулю, вчерашнему студенту, плотят 100к?
Может оно у них там и называется "джуниором", но ловить там нехрена без 2+ лет опыта и знания всякой херни, которая по объему в 10 раз превышает собственно сам js. Да и в этом случае нужно очень плотно к собеседованию готовиться.
>>1404324 Это никак не доказывает, что снулем можно вкатиться и получать 100к.
Знакомый с моей мухосране работает жс-мидлом или около того, получает 80 начинал кстати с 25к. Хотет перекатиться в ДС. Только хотелка съеживается, как до поиска работы дело доходит.
Обьясните, пожалуйста, как работает этот фактори паттерн? Есть условный shape, есть circle и triangle. Создаю я фактори для них c createShape и т.д. В коде создаю вектор shape и пушбэкаю в них через circle\triangle_factory. Вроде бы все работает и красиво, но если в конструкторах circle и triangle разное колво аргументов? Как заставить все работать с createShape с разным колвом аргументов? Так же если у меня в circle условно дополнительные переменные и сеттер\геттер, как мне к ним получить доступ? После пушбека в массив v[0]. видит только функции с Shape но никак не с circle\triangle. Подскажите плз, всю голову сломал уже. (И да, использование фактори обязательно и принципиально)
>>1404516 vector<shape*> v; v.pushback(circle_factory->createShape()); v[0]. и вот тут видны только функции с shape, как мне обнаружить еще и с класса circle?
>>1404521 >и вот тут видны только функции с shape Это как бы подразумевается. Фабрика обычно делает объекты с одинаковым интерфейсом но разными имплементациями.
Сап. Помогите разобраться с "connect" ситуация такова, что у меня есть одно окно со схемой и входными данными, и нужно чтобы при нажатии кнопки данные с LineEdit передавались во вторую формочку, реализовал считывание данных на первом пикене флеймите сильно изза быдлокода, только начал изучать средства qt не знаю как иначе разместить кучу LineEditов на формочке, кроме как создавать 9 обьектов, вот эти 9 единиц данных нужно вкинуть на вторую формочку, где должно выводится решение, тоесть идёт формула XR1+YR2, и вместо R нужно поставить полученные числа, и дальше проводить с ними манипуляции, моя попытка коннекта, с которой я обосрался, показана на 2-4 пике, буду благодарен любой помощи.
>>1404550 - итак, в коннект с использованием SIGNAL/SLOT макросов обычно пишут имя ф-и и типы всех параметров (тут 8 int), а у тебя один int. Обычно я использую версии коннекта с передачей адресов методов, так что честно хз можно ли так. Знаю что можно коннектиться к сигналу, если у сигнала количество параметров больше или равно каличеству параметров слота. - НАХУЯ ты коннектишься к QHBoxLayout, если надо к объекту твоего Widget-а? - я заебался считать количество аргументов, то ли их 9, то ли 8. Когда надо передать дохуя параметров не поленись сделать струкруру и емитить ее по ссылке; - в основном окне, данные из LineEdit-ов используются только в слоте нажатия кнопки? Тогда делай их как локальные переменные, а не как члены класса. - solutionWindow как-то удаляется после создания? Если нет, то или родителя передавай и ставь флаг, что это окно, или устанавливай аттрибут Qt::WA_DeleteOnClose. А то утечка памяти получается. - в том виде как на пиках, я вообще не вижу смысла в этом сигнале. Так как solutionWindow создается каждый раз, и данные расчитываются в том же методе. Проще сделать solutionWindow-у публичный метод setData и вызывать его. - лучше приконектится к сигналу QPushButton-а clicked чем к pressed. Имхо конечно, тут уже ты сам определяешь поведение. - ну по стилю - старайся придерживаться однообразного названия классов, переменных и тд, а то у тебя то с большой буквы, то с маленькой.
>>1404580 Спасибо, что то понял, а что то нет, я слабо понимаю к чему коннектиться, потому что QHBoxLayout из widget недоступен в solutionwindow, поэтому я хз что тут приконнектить, чтобы оно передавало данные, сейчас попытаюсь детальнее разъяснить что должно получиться, во втором окне, мне нужно расписать вот такое же решение https://electroandi.ru/toe/metod/metod-konturnykh-tokov-reshenie-zadach.html только с использованием чисел из первого окна, я сделал в функции нажатия кнопки весь расчёт, тоесть хочу передать рассчитанные данные и исходные во второе окно, чтобы просто оформить, но оно просто не выполняется, значит в connect я прописал некорректно, получается осталось разобраться что нужно коннектить чтобы данные передавались именно во второе окно.
>>1404509 на твоем уровне понимания можно просто перегрузить createShape а вообще это требует виртуального конструктора, прямой поддержки которого в с++ нет и обычно реализуется через паттерн фабричный метод
>>1404681 Это и есть матрица смежности, просто ее разреженный вариант (sparse vs dense). Лучше экономией памяти, если у тебя граф большой и имеет мало связей, не нужно нули хранить.
Аноны, выручайте, делаю список студентов по имени и фамилии, не получается сортировка по первой букве имени. Без динамического выделения памяти. Я точно знаю, что ошибка в инициализации массива указателей на имена, только где эта ошибка хуй его знает. Сразу говорю, что только только вкатился в ООП, поэтому не шарю практически нихуя, начал изучать наследование. https://pastebin.com/AedmXB9d
>>1404875 должно быть как минимум temp[j][0] < temp[min][0], потому что ты сравнивать должен первые символы, а не указатели на строки. А так вам дали std::string, а вы ебетесь с указателями. Ну ебитесь
>>1404470 Под "пулом" я понимаю fixed-size block allocator. Если пул не растущий и размер фиксирован, то за пару часов можно спокойно реализовать, если понимаешь принцип. Выделяешь память на N страниц, создаёшь где-то фри-лист (или в самих ячейках хранить, как емнип делает dlmalloc). new - снимаешь с листа, free - выдаёшь с листа. Всё, он даже уже почти thread-safe, раскидать атомиков только. Если растущий пул, то надо ещё логику управления выделенными страницами, не очень сложно.
Но вот если случайный размер (general purpose allocator), тогда дело сложное. В принципе можно просто добавить к предыдущей реализации слияние смежных блоков, чуть подкрутить того и сего, но если ты хочешь действительно хороший аллокатор, тебе предстоит веселиться с политикой нахождением блока (best fit, first fit, разделение на бины), фрагментацией и скоростью всего этого дела. Но его и не просят, так что не парься.
>>1404907 одна из главных фич пулов памяти - это то, что его легко снести когда станет ненужным такая модель хорошо ложится на некоторые типы задач, когда проэкт на сях написан но я не понимаю как сделать полезным эту фичу в крестах видимо, поэтому пулы памяти в крестах и не прижились но это все мои догадки, тк на практике я их не делал и не применял вот ты пишешь что сделал бы за 2 часа, а я, хотя и понимаю что надо делать, делал бы месяца 3, не меньше
по сути, выгоду по скорости пул памяти дает не при выделении памяти, а при освобождении плюс экономится размер памяти за счет того что внутренние обслуживающие структуры памяти меньше размера занимают (не надо размер блока помнить, он фиксированный)
>>1404966 >такая модель хорошо ложится на некоторые типы задач, когда проэкт на сях написан >но я не понимаю как сделать полезным эту фичу в крестах Какая разница, на чём написан проект? Пулы и аллокаторы используются всегда для одних и тех же целей: уменьшить число аллокаций, когда у тебя много мелких объектов одного типа постоянно приходит и уходит. Неважно, Си, Плюсы. Пулы объектов даже на джаве были (хотя с новыми JVM особо и не нужны они).
>вот ты пишешь что сделал бы за 2 часа, а я, хотя и понимаю что надо делать, делал бы месяца 3, не меньше Ты три месяца будешь делать 1 (один) связный список?
Доброй ночи, аноны. У меня есть два вопроса к разработчикам на крестах: 1) Как обстоят дела с вакансиями в вашем городе (не беру в расчет ДС/ДС2) для новчиков без опыта работы. Например, в моем городе (Ростов-на-Дону) таких вообще нет. Все в основном от мидла и выше. Так вот вопрос - как начинают свой путь программисты на C++? Неужели переходят с других языков? Хотя мне казалось, что его многие учат первым. Я, например, в универе его учил первым по программе. 2) Для программирования в никсах вообще стоит рассматривать C++ сейчас? Или же до сих пор все модули - это чистый C, в большинстве своем?
>>1405024 >Так вот вопрос - как начинают свой путь программисты на C++ Несколько лет сосал хуйцы на госзаводе. И даже там я не был джуном. Со всеми проблемами ебался сам, на качество моего кода всем было похуй. Но я дохуя читал хороших книжек. А кто не читал до сих пор на этом заводе. >Для программирования в никсах вообще стоит рассматривать C++ сейчас? Ты про никсы или про ядро никсов? Потому что это две большие разницы
>>1405034 Это примерно как пойти в макдак сейчас или поучиться и пойти в макдак стать специалистом. Кресты это высокий порог вхождения, со всеми достоинствами и недостатками. Работа будет.
>>1405034 Не вижу особого смысла. Очень несовременный язык, который применяется либо в легаси десктопе, который писали ещё тогда, когда кресты не проиграли эту нишу шарпу, либо в рокет саенс, где надо нереально въебывать и очень хорошо разбираться в математике или архитектуре пк. В первом случае зп нищенские, во втором на уровне джавистов, ненапряжно пишущих круд.
>>1405046 >Ты про никсы или про ядро никсов? Да, я про ядро. Знаю, что в окружении, вроде как, и так часто qt и c++ используют
>>1405113 >вкатываться в С++ смысла ровно 0, иди во фронтэнд Мне уж ближе бэк тогда, я думаю. Правда вот PHP не особо близок. Но он вроде как и бэке и во фронте обязателен к изучению. Ну и еще сейчас есть вариант быстро перекатиться в iOS разработку, но вот как-то немного смущает узкая специализация свифта под продукты Apple (хотя и мак и айфон у меня для изучения есть).
Пацаны, решил делать сортировку по номерам зачеток, в интовый массив все кладу по итогу, но сортировка по ебанутому работает, точнее практически не работает, но вроде все правильно сделал https://pastebin.com/fVmkDcKj
если на проэкте используется стандартная библиотека, то, по сути, функционал пула памяти перекрывает обычный вектор с предварительно выполненным reserve
>>1405185 У тебя A это объект типа Student i-ый, а не значение поля numb этого объекта. Тебе надо обращаться через оператор точку к полям или стрелку, если через указатель.
>>1405136 операторы >> и << лучше не трогать для начала. Когда про перегрузку операторов узнаешь, там понятно станет. Алсо, пока перегружать эмодзи нельзя, терпеть можно
>>1405365 >Ну да, а в чем проблема? Хочешь всю строку - пиши cin.getline О том и говорил. Какого-то такого поведения и ожидал от этого оператора. >>1405436 >операторы >> и << лучше не трогать для начала Ясненько, спасибо. Страуструп просто именно с них начал пояснять как работать с инпутами, аутпутами.
>>1405046 >Несколько лет сосал хуйцы на госзаводе Анонче, нахожусь в такой ситуации - сосу хуйцы на госзаводе. По городу вакансий на плюсах нет, кроме как на мой завод. Дай советов мудрых как выкатится с этой безнадеги. инб4 читать хорошие книжки.
>>1405136 Перегрузку >> и << для I/O делали наркоманы, когда С++ был еще хипстерским андерграундом. Сейчас комитет такую хуйню никогда бы не пропустил. Сделали бы через функции get/set (in/out).
>>1406292 соответствующая глава во втором издании "шаблонов" вандервуда, если ты только начал разбираться из классики - александреску шалбонное метапрограммирование на крестах постоянно эволюционирует и видоизменяется, проще всего отслеживать это просматривая соответствующие доклады с конференций https://www.youtube.com/watch?v=IF51Gsu3Cec плюс смотришь как развиваются соответствующие библиотеки в boost: https://www.boost.org/doc/libs/?view=category_metaprogramming
но дзен заключается в том, что шаблонное метапрограммирование ты изучаешь не более чем как для собственного развлечения, типа такое хобби, на практике ты его врят ли будешь применять те нужно принять то что ты просто так развлекаешься и смириться
>>1406476 glut\freeglut\flfw\sdl2 и тд и тп это библиотеки для создания контекста. То есть окошка и обработка сообщений от ОС: клавиатура\мышка\джойстик и тд. Там, конечно, не только этот функционал. Разработчики добавляют что-то своё. Glut\freeglut не рекомендуется использовать. Они устарели и давно не обновлялись.
Аноны, объясните за статическую память, что это за заверь? Есть стек, есть куча, а это че за хуйня? [code] for(;;) { static int c=0; c++; } [/code] Где этот статик вообще бля??
Аноны, подскажите как изменить структуру проекта чтобы стало по человечески, а не laba1.cpp. Есть проект, в нем сущестует 3 класса - два из них являются составляющими шахматы пишу, клетка и фигура, а один - общий доска шахматная. Но в первых двух классах нужно вызывать методы родителя при перемещении фигуры нужно проверить что на клетке нет других фигур например, и пару слотов коннектить. Сейчас храню в каждом классе указатель на общий, но понял что это какое-то хуёвое проектирование, раз приходиться так делать. Подскажите как можно переделать, чтобы составные классы не смогли навредить общему, если что-то пойдет не так
>>1406576 Пикрелейтед >>1406582 Выделяется при старте программы, освобождается при выходе >>1406588 Класс фигур с енумом в качестве типа фигуры чтобы можно было повышать пешки. Хранят также был ли первый ход, опять же для пешек. Двумерный массив с указателями на фигуры в качестве доски. Класс контроллер определяющий возможные ходы, хранящий была ли рокировка и ТП Наверное ещё класс ход для визуализации, записи партий и отката ходов.
>>1406549 если ты способен применить техники шаблонного метапрограммирования на продакшене, четко осознавая что есть в этом необходимость, то за твой скилл и твое место работы можно только порадоваться-позавидовать
>>1406650 Нет, фигура отдельный абстрактный класс. А доска обьединяет в себе фигуры и клетки. Но изнутри фигуры мне нужно обьединить сигнал Qt-шный с слотом доски, и вызывать некоторые функции при построении вектора для хода/атаки фигуры. Вот недавно какой-то баг обнаружил, что фигура при инициализации делает какую-то хуйню с доской которую я передаю по указателю, в результате чего указатель не равен nullptr, но при этом данные его не валидны, и при попытке вызвать какой-то метод программа крашится с SEGFAULT. Потому и спрашиваю, как можно огранизовать иерархию классов, чтобы фигуры и клетки не могли навредить доске, но при этом имели доступ к ее методам. Книжку про паттерны я не читал
>>1406719 Я пока сам только осиливаю ООП, но попробовал бы так: есть класс клетки, который может быть черный/белый, пуст/занят, такой-то фигурой, если занят. А ещё лучше - внутри указатель на объект класса "фигура", в котором записана своя логика ходов и всего остального, если он nullptr - то клетка свободна. А доска - это класс, наследующий от контейнера, содержащего объекты класса "клетки", т.е. вектор векторов клеток и доопределенные методы, чтобы объекты класса "игрок" дёргали свои фигуры.
Но я только учусь быдлокодер, потому эта схема вряд ли хороша.
>>1406723 > потому эта схема вряд ли хороша. Да нормальна. Ни к чему все эти усложнения. Доска обычный массив структур. Структура (как ты и описал) имеет цвет, какой-нибудь внутренний индекс для расчёта ходов, указатель на фигуру.
>>1406719 Иерархия классов против SEGFAULT не поможет. Ты просто хуйню какую-то делал. Ограничивай количество действий которые можно сделать через публичный интерфейс. К примеру если тебе нужно чекать может ли какая-то фигура перейти на какую-то клетку, то ты вызываешь метод доски который это чекает. А не вытаскиваешь (через указатель на доску) кучу инфы (например о других фигурах) в метод фигуры и там ковыряешся потенциально что-то ломая. Можешь ограничивать доступные методы. Например, если твоей фигуре от доски нужены только методы "проверить возможность хода" и "переместить меня", то ты можешь создать абстрактный класс BoardDelegate (например) с двумя этими методами, доску отнаследовать от нее, а указатель на доску в классе фигуры объявить не как указатель на доску, а как указатель на BoardDelegate. И тогда твоя фигура сможет вызывать только этих два метода доски.
Сап, анон. Возникла задача визуализировать дискретно отходящую графику условно с датчика на крестах. Проект без qt, только буст. Сейчас вывод был в .bmp в папку, но нужно все же в динамике, да и сохранять на диск пиздец как не хочется. Визуализация не для конечного потребления, больше как для изучения. Какой путь лучше выбрать? Использовать Vulkan (opengl, directx)? Или же как-то сохранять в numpy массивы, а затем загружать в питон? Или лучше сразу написать враппер моих классов для того же питона, и там уже сделать визуализацию?
>>1406729 Да баг с сегфолтом я уже нашел и пофиксил, просто после него задумался об проектировании, чтобы таких ошибок изначально не возникало. Про делегат спасибо, сейчас что-то такое попробую сделать
>>1406729 > создать абстрактный класс BoardDelegate (например) с двумя этими методами, доску отнаследовать от нее Где про подобное можно почитать по подробнее?
>>1406793 надо перевести терминал в какой-то там видеорежим, но это типа древняя хуйня, короче, можешь курить borland C через DOSBox,а можешь левую графическую либу юзать, но это не точно, сосите хуй, честь имею
Как вкатиться в функциональщину с констэкспрами, темплейтами и прочими фишками? Нихуя не понимаю. Хочу был компилтайм богом. Есть гайды какие на русике?
>>1406856 дзен заключается в том что раньше (до новых стандартов) в метапрограммировании на шаблонах приходилось использовать техники функционального программирования, а конкретно: метавычисления на типах вообще не могли изменять состояния своих сущьностей, которыми оперировали, тебе приходилось не изменять состояние, а производить новые состояния; метавычисления на значениях были оче ограничены и ты тоже мало мог че поделать, тоже приходилось не изменять, а порождать новые значения вместо итерации приходилось использовать рекурсию вместо условного оператора приходилось использовать по сути вариант патерн-матчинга в виде комбинации частичных специализаций и sfinae в новых стандартах многие метавычисления (как на типах так и на значениях) уже можно делать императивным способом, так гораздо наглядней и понятней получается
это то что касается компайл-тайм реал-тайм лень расписывать
>>1406873 Я слышал что это язык для олдов с опытом программирования от 5 лет и ньюфаги его не осилят... Мне базовые понимания нужны, чтобы в ногу со временем идти так сказать.
>>1406886 Вот это ты загрузил меня. Накидайте лучше материала какого, а я уже сам ковырять буду.
>>1406643 Хуйню какую-то написал. Есть сегмент данных, размер которого фиксирован, есть сегмент кучи, который идет за ним в адресном пространстве, и есть сегмент стека, который растет с верхних адресов вниз.
>>1406906 Ну сорян, таких подробностей не знаю, я читал про постоянную память(она была может быть условно в книге стеком обозначена) и динамически выделяемую(кучу). И он тоже спросил - стек или куча? >>1406898 Что за баг, и на каких версиях присутствует?
>>1407065 К тому же там инклюды какие-то вонючие подключаются ( stdafx.h) и есть отличия от стандарта и баги как выше писали. Одни минусы и ноль полезности при злоебучей тяжеловесности. Такое говно. А ты говноед.
>>1407089 Насколько большой у тебя проект? Хотя бы LOC метрику приведи. >>1407093 > Вообще чего тебе такого даёт иде? Конкретно студия - почти ничего. Но вместе с решарпером становится гораздо удобнее и быстрее кодировать. > для отладки gdb. Не удобно дебажить без контекста. >>1407094 > К тому же там инклюды какие-то вонючие подключаются ( stdafx.h) Без комментариев. Почитай про precompiled headers. >>1407096 > По сути пользуясь их иде ты пишешь на некотором диалекте плюсов Ну кто же виноват, что ты решил наговнокодить? ¯\_( ° ʖ °)_/¯ Может ещё gnu extensions вспомнить?
>>1407094 > stdafx.h Это предкомпилированный заголовок, ты можешь туда всякие инклюды добавлять часто используемые, чтобы сохранить время. И это кстати отключается одной галочкой, если не нужно.
>>1407106 >Насколько большой у тебя проект? Хотя бы LOC метрику приведи. Огромная либа, сравнимая с STL по размеру. >решарпер Всё есть в вскоде том же. >прекомпилед хедерс, можно отключить Да какая разница, зачем вообще иде что-то добавляет отсебятину какую-то, если можно без этого? >наговнокодить Одно дело экстеншн, который добавляет новое, но со стандартом не расходится, другое это именно расхождение. Ну да пох, это уже не иде, а компилер, а в студию любой компилер можно вставить по идее. В общем возвращаясь к началу, баг в студии никаким раком не относится к static, есть стандарт, который описывает как должно быть, а есть всякое мелкомягкое васянство, которое к делу не относится.
>>1407120 > не относится к static Ну не относится к описанному в стандарте static. Мало ли чё они там заговнокодили у себя, их дело, всё равно нормальные люди их говно не юзают.
>>1407107 >ты можешь туда всякие инклюды добавлять часто используемые, чтобы сохранить время. Бля, а сам я создать такой хедер с инклюдами типа не могу, религия не позволит или че? Нахуя мне это говно пихать, меня вот лично это бесит.
>>1407124 > Огромная либа, сравнимая с STL по размеру. То есть у тебя хватает знаний, чтобы писать библиотеки, но ты не знаешь, что такое pch? Наркоман? > vscode Что есть? Зачем мне ещё один браузер на компьютере? > Да какая разница, зачем вообще иде что-то добавляет отсебятину какую-то, если можно без этого? Студия добавляет pch потому что ты забыл снять галочку при создании проекта. > Одно дело экстеншн, который добавляет новое, но со стандартом не расходится, другое это именно расхождение. Сколько раз из-за этого расхождения у тебя что-то не получалась / ломалось? Как думаешь, увеличится ли это число ближайшие десять лет? > В общем возвращаясь к началу, баг в студии никаким раком не относится к static, есть стандарт, который описывает как должно быть Кончено не относится. На то он и баг, а не "расхождение со стандартом".
>>1407131 >ты не знаешь, что такое pch Где я такое говорил? >Зачем мне ещё один браузер на компьютере? Не понял, удобный текстовый редактор же. > забыл снять галочку Это они забыли её не делать поставленной по умолчанию, а не я забыл снять. В том же гцц всё намного лучше сделано, если тебе нужно прекомпилед хедер создаёшь хедер с инклюдами например и компилишь в .gch и никакого бугурта, а тут за тебя решили как тебе удобнее, меня такое отношение бесит, например. >Сколько раз из-за этого расхождения у тебя что-то не получалась Нисколько, я не юзаю микрософтовский компилер потому что. >На то он и баг, Не относится он потому что чувак спрашивал про С++, а С++ <=> стандарт, чем является ключевое слово статик в имплементации мелкомягких и где там у них баги дело десятое, понимаешь? А ты так написал(или не ты, тот анон в общем), будто плюсы равносильно визуал студии, на мой ответ с доходчивой табличкой со скоупами/временем жизни/линковкой ответ был мол скажи это студии, чего блядь, причём тут ИДЕ вообще? Я считаю, что у меня полыхнуло совершенно обоснованно.
>>1401309 (OP) Помогите все разумные способы написания "Вuжуал Сtyдия" придумать, не могу автоскрытие настроить, то и дело какой-то ребенок со своим WinAPI прорывается, и из треда сразу выйти хочется еще на 20 реинкарнаций.
>>1407180 Это чтобы функция сохраняла значения каких то параметров от предыдущего вызова этой функции. Это еще в сишке сделали, например чтобы функция генерации псевдослучайных чисел использовала предыдущее значение для генерации следующего, и хранилось бы оно только в одном месте.
>>1407185 брат, вот за такое я очень благодарен, охуенно, теперь понял зачем это нужно, брат, где ты такое прочитал? А то в большинстве учебников написано "что", а не "зачем".
>>1407237 >создаётся в начале программы там вроде гарантируется только то, что будет создана до первого использования. Точный момент создания не регламентирован.
>>1407136 Компилирую MSVC под винду и gcc под юникс. Честно говоря, не вижу особой разницы, ибо весь проект симейком управляется. После генерации на любой ОС остается нажать одну кнопку для полного билда.
>>1407700 Свое приложение, а не чужое. Ты меня не правильно понял. Допустим, в дебаге весь жизненный цикл программы прокликал, все работает, а релиз версия крашится, где-то неопределенное поведение. Как дебажить?
У себя на компе програ нормально компилится и работает. Отправил прогу другу. Нормально компилится, но работает неправильно. Там вместо нормального числа образовался nan.
Дело в компиляторе? У меня линукс и дефолтный code bloks. У друга мак. Есть какие-то флаги, которые надо поставить перед компиляцией, чтобы прога нормально работала на любом железе?
>>1407702 Читать-прогонять полученный асм. Лично я такой баг однажды так и не нашёл после целого дня поиска. Отключил оптимизацию во всём файле, где была ошибка, и забил.
Начал изучение шаблонов, захотел реализовать шаблонный класс, который позволит обрабатывать одномерный массив любого типа, где я обосрался, и как правильно сделать?
>>1407934 в стандарте 98 были прописаны 2 способа - модель включения и экспорт шаблонов но оказалось что экспорт шаблонов крайне сложно реализовать в компиляторе (пара реализаций все же была) и при этом их полезность оказывается сомнительной об этом подробно писал саттер в "новых сложных задачах на c++"
>>1408083 >Тыкать пальцем в небо ни один дебаггер тебе не скажет, что ты забыл обнулить структуру перед использованием. Попробуй мозгами пошевелить чтоле
Аноны, есть прога с использованием функции qsort, которой там быть не должно. Можете подсказать как от нее избавиться? Выглядит так: qsort(&points[1], n - 1, sizeof(Point), compare);
Драйверописатели тут? Поясните почему WDK не поддерживает STL? Там же по факту нужно просто реализовать несколько ключевых функций и все должно заебись работать. Типо в new malloc заменить на ExAllocatePool, и в delete free заменить на ExFreePool. Ну может ещё в нескольких функциях поменять методы создания потоков/объектов синхронизации. Почему мне при написании драйвера приходится жрать говно и не иметь ни динамического массива, ни строк, вообще нихуя и это в 2019, сука, году.
>>1407060 Короче я не послушал всех и сериализовал в бинарник, и выцепил в великолепном питоне через numpy. Потом может прикручу враппер, больно уж годная связка выходит
Аноны, а msvc с современным языком и всякими stl даёт какую-нибудь векторизацию и распараллеливание само? Я не хочу сам писать треды и обосанные мьютексы, а для асинка я пока слаб. Почему, если компилятор видит, что для каждого элемента вектора надо сделать +1, нельзя это как-то в параллель?
>>1408305 vs хреново с ним дружит, не было в начале 17й студии неких вещей типа профайлера. Не знаю, как сейчас. >>1408309 Спасибо, включу, с института на автомате выключал
>>1408311 >распараллеливание В 17х появилось ExecutionPolicy для многих алгоритмов, правда я нигде не видел, чтобы их кто-то использовал. >векторизацию Любой компилятор может только самую примитивную векторизацию сделать. Как говорится, _mm256_pishi_sam_pd(); >Я не хочу сам писать треды и обосанные мьютексы Пиши CAS циклы и wait-free алгоритмы.
>>1408330 >Кто тебе такую хуйню сказал? Хуйня - это когда говнокодеры тащат в ядро плюсы с stlями, эксепшенами и прочей ебалой, а адекватные будут писать на C.
Бля, пацаны, я вот выучил плюсы, писал тут недавно по этому поводу, ну и я не придумал короче, что дальше делать, ну и короче что вы думаете? Взял да и давай маерса читать. Бля! Я охуел! Я ж нихуя не знаю! Я ж говнокодер бля! Оказывается, на плюсах писать и собака может, а вот уметь писать ексепшн-сейф код с адекватной инкапсуляцией и к тому же производительный это голову иметь нужно! Пиздец!
>>1408363 не суди по себе, дружок. Мне клованов на работе хватает, которые свято верят в то, что 6-ая студия генерит самый быстрый код, а все что позже 8-й нахуй не надо. А тут еще ты со своими шаблонами в дровах.
>>1408365 Все хорошо, бро. Все крутые люди когда-то крутыми не были, погружайся в сабжекты, строй таски и улучшайся, не все же время uznay_ebal_li_ya_telku_s_takim_imenem.c компилить.
>>1408332 Но ведь как раз таки на си больше шансов допустить ошибку. Деструкторов нет и ты сам должен освобождать всю выделенную память -> большой шанс забыть про это и получить утечку.
>>1408502 Ты отвечаешь человеку который на вопрос про шаблоны пишет про эксепшоны. Следовательно он или тролль, или дебил, а ты дебил, что его коментишь.
Объясните почему вот такая хуйня работает: int some_number = 5; auto func = [&]() ->int { \treturn some_number +=2; }; some_number = func(); А при передаче этой лямбды в другую функцию требуется обертка в виде std::function, т.е. вот это не работает: using func_ptr = int(звездочка)(); void test(func_ptr func) { \tfunc(); }
test(func); //ошибка компиляции Что такого магического делает std::function, что заставляет это работать?
>>1408542 >a ->int Явное указание выходного типа теперь избыточно. >using func_ptr = int(звездочка)(); >void test(func_ptr func) >{ >func(); >} И вообще типы лучше нигде явно не указываться если это точно не требуется: auto test = [](auto func) { func(); };
И кстати лямбда - это выражение языка, описывающее замыкание, а не само замыкание.
>>1408576 А какой типо тогда у этого объекта? Как мне кастануть к нему, сделать указатель на такой объект? При наведении курсора на него, показывает что-типо lambda []... , но к такому типу нельзя привести.
>>1408585 Ну аргументы лямбды Я указываю т.к. если это объект то при попытке доступа к методам или полям этого объекта студия не показывает список со всеми этими свойствами и приходится их вручную самому писать, а не 2-3 первых буквы и дальше стрелочками.
>>1408599 >А какой типо тогда у этого объекта? У каждого компилятора свое внутреннее представление о типе лямбды если интересно узнать какой именно тип, то читай Маейрса "Эффективный и современный С++", поэтому при присвоении лямбды переменной нужно писать auto или std::function (но в этом случае будет просто неявный каст, поэтому так делать нужно, если очень надо). А для твоего случая лучшим вариантом будет сделать через шаблон: template<typename Functor> void test(Functor func) { func(); } И компилятор сам разберется, что ему подставлять.
>>1408588 Ну и что не так с экспепшенами? В ядре тоже обработка исключений. Даже несмотря на то, что их можно просто не использовать, разве нельзя приделать их поддержку?
>>1408603 Да можно. И эксепшены можно, и все вместе можно,оборачивая в многоуровневые try catch'и. Вопрос в том, как сделать проще и понятнее, с минимумом кода.
>>1408662 вроде в компиляторах крестов при реализации собственных исключений испльзуют seh (или его аналоги в юниксах), но не уверен, где то слышал или читал
>>1408679 нет, исключения из стандарта и SEH - это абсолютно разные вещи. SEH не рекомендуется использовать микрософтом вообще нигде, кроме драйверов, т.к. в драйверах SEH ловит кое-какие проблемы, которые вообще никак не поймать по-другому.
>>1408682 я в книжке рихтера читал что исключения с++ в компиляторе майкрософт используют seh это было под винду и относительно давно поэтому и спросил, вдруг кто лучше знает
>>1408682 Если вот эту хуйню на пикриле включить то и SEH исключения тоже ловятся в обычном try catch ведь, значит там где-то всеравно реализуются обработчики сеха.
>>1408599 >А какой типо тогда у этого объекта? У каждой лямбды свой уникальный unnamed тип. Имени у него нет, поэтому никак ты его не напишешь, указатель не сделаешь и не кастанёшь. >>1408600 Потому что так гласит Стандарт.
>>1408834 >так гласит Стандарт >The closure type for a non-generic lambda-expression with no lambda-capture whose constraints (if any) are satisfied has a conversion function to pointer to function with C++ language linkage (10.5) having the same parameter and return types as the closure type’s function call operator. C++17 International Standard 8.4.5.1:7
>>1408834 >Имени у него нет, поэтому никак ты его не напишешь, На сам деле можно, просто не нужно: auto MyLambda = []{}; using MyLambdaType = decltype (MyLambda);
>>1409067 >Это значит, что через фигурные скобочки никак не получится? Только руками в каждый член присваивать? Пишешь конструктор и не ебешь мозг. И лучше использовать std::copy вместо memcpy.
Допустим, есть какая то линия из пикселей, не обязательно прямолинейная. Как построить линии из каждого пикселя этой линии, перпендикулярные основной линии? Кажется это называется нормаль или как то так? Есть какие то готовые методы или формулы?
>>1409432 Причем тут С++? А так нормаль к кривой в данной точке это перпендикуляр к касательной в данной точке. А касательную уже легко найти, найдя производную. Но матанализ был 9 лет назад, поэтому могу наврать.
>>1409441 > А касательную уже легко найти, найдя производную. Это я знаю. Но это работает, только если известна формула графика функции. А у рандомной нарисованной кривой формулы нет.
>>1409432 У тебя есть три точки. Точка через которую нужно провести нормаль и две соседних. Проводишь одну касательную черех центральную точку и соседнюю, и вторую касательную через центральную точку и второю соседнюю. Находишь среднюю между ними - от нее строишь перпендикуляр. По формулам - у тебя есть формула прямой проходящей через заданую точку. Все будет упираться в нахождение коэффициентов (наклона прямой) k. Находишь коэффициент первой касательной (по двум точкам - вычитаешь соотвествующие координаты друг из друга и делишь), находишь коэффициент второй касательной. Потом тебе нужно продумать как именно высчитать средний коэффициент. Потом делаешь над ним очевидные преобразования (чтобы получить перпендикуляр) и всьо.
>>1409443 >у рандомной нарисованной кривой формулы нет Дык у нее и производная не во всех точках может существовать => в какой-то точке может не быть нормали / быть больше одной нормали. С другой стороны, в кампухтере все равно это скорее всего будет ебошится численными методами.
>>1409463 Мне вообще изначально похожий метод пришел в голову, но я покумекал насчет него, порисовал в тетрадке, и там хуйня получится скорее всего. Постарался нарисовать. В масштабе пикселей эти нормали будут хаотичными. А должно быть у них у всех направление, как на второй пикче белыми линиями.
>>1409477 Ну тогда тебе как-то сглаживать нужно. Можешь попробывать строить не по соседним точкам, а например через две. Или высчитывать несколько нормалей - одну по соседним точкам, вторую по удаленным и брать среднее. Если тебе именно плавность нужна, то тут наверное в сторону какой-то скользящей средней или чего-то подобного думать надо.
>>1409512 Я уже склоняюсь к тому, что нахрен эти нормали. Все равно для моей основной задачи это плохо подходит. Надо какое-то другое решение. Но за ответ спасибо.
Сап. Класс имеет геттер, возвращает очевидно конст реф. Почему auto g = foo.getter() выдаёт мне значение? Авто же вроде как парсит эту хуйню. Конструктор копирования удален.
>>1409676 > Авто же вроде как парсит эту хуйню Авто выводит тип, а квалификаторы вроде так называются типа (указатель, ссылка, константа) не выводятся.
>>1409676 У рефференса есть незначительное отличие от указателя в том что указатель это (семантически) отдельная сущность (которую, к примеру, можно скопировать), тогда как рефференс (семантически) считается синонимом объекта. На низком уровне это естественно тоже отдельная сущность но на высоком (в тексте программы) когда ты каким-либо образом используешь рефференс считается что ты работаешь именно с самим объектом (на который указывает рефференс). Поэтому, к примеру, нельзя создать именно копию рефференса (естественно не занимаясь какой-то хуйней с reinterpret кастами или чем-то подобным). При Foo& aaa = foo; Foo& bbb = aaa; у тебя во второй строчке не создается копия рефференса аaa, а объявляется новый рефференс bbb на объект foo потому что семантически вторая строчка равноценна Foo& bbb = foo; - потому что aaa это синоним foo а не настоящая самостоятельная сущность. Поэтому и foo.getter() парситься так как будто вместо него указан именно объект (на который указывает рефференс). Почему const пропадает я не могу объяснить, там есть какая-то дрисня с выводом типов (и параметров шаблонов) что иногда отбрасывается самый внешний const, но я так и не смог понять какого хуя. Каким отбразом конструируется новый объект с удаленным коструктором копирования тоже итересный вопрос. У тебя там могут быть неявные касты - полбъявляй остальные конструкторы как implicit. Или может дебагом посмотри каким именно конструктором строится объект и оттуда разбирайся.
Посоветуйте как мне сделать правильнее\лучше. Делаю игру. У игрока есть способности (реализованы просто калбеками). Например, создать какую-то сущность на карте или удалить её с карты. Также имеются режимы игры (для каждого свой набор способностей). Внутри каждого режима есть свои состояния: подготовка, игровой процесс, конец и тд.
Так вот, при переключении состояния должны, например, заспавнится определённые сущности, появится виджет на экране и тд. Пока что это сделано теми же калбеками, только их вызывает игра сам игрок к ним доступа не имеет. Но мне бы не хотелось смешивать это всё в одно.
Может через какой-то паттерн или какую-то йоба приём можно это сделать? Типа, состояние переключается и посылает эвент, а обработчик на него реагирует в Вов сделано подобное, правда там не для игровой логики это сделано, а для интерфейса?
>>1409714 > Делаешь машину состояний, задаешь действия при переходе от состояния к состоянию. Так и сделал. Там что-то вроде: actionManager.UseAction( "createMap" ); и тп. Но посчитал что вместо прямого вызова можно сделать по другому.
>>1409728 Всё так у меня. Сначала меняется состояние, а затем происходят действия (если нужно). А я хочу чтобы вместо прямого вызова какой-то функции было что-то вроде посылки событий, но кроме обсервера какого-нибудь я ничего не придумал (и кроме того что есть сейчас).
С программированием знаком, но с ++ не очень. Захотел написать что-то с OpenGL, но нигде не написано как это делать from scratch. Ну или from scratch считают использование CMake/скачать готовый проект.
Дайте ссылку на ресурс (сайт/книгу/статью), где можно почитать нахуя этот CMake нужон и как писать на плюсах имея только g++, vim и клавиатуру? Только не надо затирать о boilerplate. Я хочу понять как работают плюсы. Желательно чтоб не было заточено под Linux, на работе, к сожалению, винда.
>>1409773 > двач, как настроить проект на opengl >> вот тебе инструкция > нет, хочу сам всё сделать >> ну тогда сделай то-то и то-то > иди нахуй быдло у меня ошибки вылазят
>>1409755 >нахуя этот CMake нужон Когда у тебя проект состоит из более чем одного файла laba.cpp, то удобнее использовать утилиты автоматизации сборки. Одной из популярных является make, который жрет Makefile и собирает проект, но из-за того, что язык мейкфайла пиздец какой кривой, то начали создавать генераторы этих мейкфайлов. CMake один из таких генераторов, еще есть qmake например (от Qt). https://ru.wikipedia.org/wiki/Автоматизация_сборки >как писать на плюсах имея только g++, vim и клавиатур Ручками ебана. Пишешь свою ебу, например, в yoba.cpp. Далее в консоли: g++ yoba.cpp -o yoba (флаги компиляции сам посмотришь, какие нужны). Если проект из нескольких файлов, например yoba1.cpp и yoba2.cpp, то каждый файл сначала компилишь в объектный файл, а потом собираешь вместе: g++ yoba1.cpp -c yoba1.o g++ yoba2.cpp -c yoba2.o g++ yoba1.o yoba2.o -o yoba Согласись, что писать это заебывает, а если нужно еще и библиотеку какую-нибудь, то легче застрелиться. Для облегчения всей этой ебли и нужен CMake.
>>1409830 >>1409836 Хуёвый ты тролль, если для тебя оскорбление - признак разрыва. Скорее всего, просто малолетний.
>>1409844 Спасибо. Вот я как раз о второй части хочу почитать. Что если мне нужно подключать хучу библиотек, и у меня хуча файлов? В каком порядке это всё компилировать? Хочу весь процесс компиляции понять. Я пролистал Страуструпа The C++ Programming Language по диагонали, но там, как я понял, компиляция не рассматривается?
>>1401309 (OP) Допустим есть у нас template<class T> struct A{ T value; }; и есть у нас специализация template<> struct A<int>{ int value; int another_value; };
Как мне проверить, что у нас нет специализации для double, например? Должно быть что-то вроде static_assert(is_specialisation<A<double>>::value, "Not specialisation"); это должно падать а это static_assert(is_specialisation<A<int>>::value, "Not specialisation"); должно проходить.
>>1410112 Чувак, ну ты серьёзно думаешь, что я первым делом на двач полез? Вариант через sizeof не работает, если базовая версия шаблона определена. Если бы было template<class T> struct A; template<> struct A<int>{} Тогда другое дело. А так хуй, тот код выдаст тру на A<double>
>>1410221 Хотя это тоже не обяхательно по идее, потом можно было бы class... Args написать или типа того, но для простоты пусть будет известно, что один параметр всего.
сап двач. нужна помощь в написании простых программ с нуля по заданиям. кто то может написать за соответствующую оплату? писать на мыло [email protected]
Как constexpr передать в функцию? Если сначала инициализировать переменную, то все работает, если пихать сразу в функцию, то хэш вычисляется в рантайме. Что за хуйня?
>>1410220 Как блядь, действительно. std::is_same<double>(A::value). Ты можешь явно проверить, какого типа переменная у объекта класса, если value будет из int специализации, то is_same вернёт false. Хоть почитал бы.
>>1410768 Если ты хочешь считать хэши в компайл тайме, то смотри в сторону std::array вроде как в 17 сделали так чтобы он работал в constexprt функциях
>>1410803 Сам твой массив выделен с помощью new? Если нет, то к нему delete [] применять нельзя. Во вторых, ты применяешь оператор delete, предназначенный для удаления одиночных объектов, а не массивов (нужно delete []).
>>1410833 >Можешь пояснить? Если вкратце, то ты просто скопировал объект Player, выделенный с помощью new, в массив. И далее просто переписал указатель, соответственно память выделилась, но не удалилась. Вообще в современных крестах использовать "сырые" владеющие указатели - моветон. Для это есть std::unique_ptr и std::shared_ptr. Чем они различаются гугли сам.
>>1410841 Принципиальная разница в том, что в первом варианте 3 объекта создаются на стеке и автоматически уничтожаются, когда выходят из области видимости, а во втором все создается в куче и утекает. Но все равно в первом варианте 1 утечка есть, но еще есть также 3 вызова move конструктора и 3 вызова copy конструктора, что бестолково с т.з. расхода ресурсов.
>>1410850 >>1410847 >>1410844 Спасибо. Алсо, попробовал запустить программу в code blocks c gcc, но компилятор выдает ошибку. > 'Position' is not a class or namespace
>>1410833 >Можешь пояснить? Правило буравчика - каждому new должен быть свой (обычно единственный) delete. Каждому вызову malloc должен быть свой вызов free.
Переполнение целочисленного это UB или не UB? В частности беззнаковый char везде одинаково будет реагировать на отрицательные значения ну т. е. там, где ожидался знаковый char?
Допустим, у нас есть шаблон. И в нем такое условие: enable_if_t<is_same_v<_Tag, _Exact_args_t>, int> = 0> что, конкретно, значит = 0 здесь? На SFINAE не похоже вроде.
Как сделать итератор шаблонного класса со вложенным в него контейнером? Хуйня на пикриле не компилится, если убрать темплейт и заменить все Т на конкретный тип типо инт то оно работает.
>>1411242 Добавь typename перед std::vector<T>::iterator. А лучше не жрать говно и написать auto, ну или просто сделать метод шаблонным, если хочется больше читаемости.
>>1411246 >написать auto Бля все время забываю, что так можно, спасибо.
Кстати поясните в чем разница между for (auto& i : array) и for (auto&& i : array)? И то и то по сути ведь по ссылке берется без копирования, просто некоторые почему то пишут там двойную ссылку.
Хочу контейнер с упорядоченностью, возможностью быстрой вставки и удаления в начало и конец и возможностью быстро узнать, есть ли какой-то элемент в этом контейнере. Такое бывает?
>>1411367 Под упорядоченностью я подразумевал сохранение порядка при добавлении. Мне нужно что-то похожее на std::deque, но с возможностью проверить в нём наличие элемента, как в std::set.
>>1411370 Хз, можно обернуть map и deque, при добавлении добавляешь и туда и туда, если нужно найти ищешь в мапе и получаешь индекс за логн и по индексу за константу достаёшь из дека. Бредово немного, но по идее подскажет.
>>1411373 >It is undefined behavior to add declarations or definitions to namespace >It is allowed to add template specializations for any standard library class (since C++20)template to the namespace std >добавлять специализации существующих шаблонов классов/функций Дык я про второе и спрашивал как раз. То, что новые функции и классы в стд добавлять нельзя я в курсе.
Гайз, хочу поебать себе мозги плюсами. начинал с плюсов своё вайтивайти. Уже 3 года макакоёбствую на Go. Есть ли смысл учить плюсы и пишут ли какой- нибудь бекенд-хайлоад на плюсах ? Насколько долго затянется обучение ? Есть ли смысл написать какой- нибудь пет со стеком C++/Mongo/какая- нибудь апишка ?
>>1411598 Без указателя/ссылки на класс никак ты свой non-static member function никак не вызовешь (если объект не в глобальной области видимости). Так что делай глобальной, либо static и передавай как &MyCls::MyFn, либо иди нахуй, токсик
>>1411332 Нестатические функции члены всегда скрыто принимают первым аргументом указатель на объект, из которого вызвана функция (this). Передать куда-либо можно с помощью std::bind с указанием этого объекта - bind(Class::func, &Object, std::placeholders::_1...). Без указания объекта никак. Короче, почитай про bind.
>>1411651 Вот, например. Фунция возращает поломаные объекты шейдеров с пустыми source, но с правильными ID. На 146 строке шейдеры заполнены, на 147 source пропадает. Указатели и ссылки я нигде не использую, разве функция не должна возвращать новую копию созданной на 146 строке ShaderProgram со своими копиями заполненых шейдеров, и удалить старую ShaderProgram по выходу? Почему эта функция возвращает ShaderProgram с шейдерами, у которых поля source превращаются в "", но ID остаётся?
>>1411705 А ты не забываешь в конструкторах своих шейдеров вызывать конструктор базового шейдера типа vertexShader(string src):Shader(src){}. Если ты этого не делаешь, то часть базового класса сконструирована не будет.
>>1411687 Не надо мудрить с какой-то иерархией классов. Скомпилированный шейдер vertex + fragment это просто unsigned int Его ты можешь просто копировать.
>>1411747 Если там будет Cat и Dog, наследующиеся от Animal, будет проще? Проблема в стирании std::string, а не в компиляции шейдеров.
>>1411719 Первый раз, как я понял, удаляются локальные копии параметров в конструкторе ShaderProgram. Второй раз они вызываются на 150 строке уже после создания ShaderProgram, перед выходом из getDefault(), уничтожая строки только что созданных шейдеров. Почему так происходит? Как быть?
И ещё третий раз деструкторы вызываются уже после вызова getDefault() из другой функции. Это я вообще не знаю зачем.
>>1411761 Так, блять. Причину этой хуйни я нашёл. Я просто ShaderProgram* program = &ShaderProgram::getDefault() долбаёб. Как в таком случае сделать красиво, по правилам? Я хочу чтобы у меня в классе Human был мембер ShaderProgram. Инициализировать его мне нужно после конструктора Human. Значит, этот мембер не может быть на стеке, так? Нужен указатель на него. Нормально ли будет, если getDefault() будет возвращать указатель на ShaderProgram? Как это с точки зрения управления памятью?
>>1411782>>141178>>1411782 Пусть твоя функция возвращает умный указатель на объект, выделенный в куче. Почитай про умные указатели -- сильно облегчают написание безопасного от утечек памяти кода.
>>1411802 Умный указатель считается создателем указателя на кучу и освободит память в своем деструкторе, например, при выходе управления из блока кода, где он был создан. Они и были придуманы для решения проблемы частого забывания программистами добавить delete, где это нужно.
Ананасы, поясните за указатели и наследование. Вот есть, к примеру, класс https://github.com/SFML/SFML/blob/master/include/SFML/Graphics/RectangleShape.hpp (в конце файла есть небольшой пример использования) Он наследуется от класса Shape который, в свою очередь, наследуется от других. Вот я объявляю переменную RectangleShape на стеке, так как же тогда вся эта йоба магия с виртуальными функциями будет работать?
>>1411822 > Вот я объявляю переменную RectangleShape на стеке, так как же тогда вся эта йоба магия с виртуальными функциями будет работать? Такие вызовы разрешаются статически, никакой магии тут нет.
>>1411856 Последнюю фразу не понимаю. Какой ущерб нанесен? Типо после удаления объекта по его адресу запишутся другие данные, а он пытаясь удалить себя второй раз сотрет их?
>>1411916 Удаление "удаленного" - undefined behavior. Если в деструкторе указателю бы присваивался nullptr после delete, то было бы все норм, но так никто делает, т.к. лишняя операция, которая замедляет производительность, ну и все-таки код на с++ должен писать не дебил.
Объясните плз как работает этот аллокатор? Почему там говорится, что они могут с помощью new выделить буферы и они после выхода из scope сами уничтожатся? Как это работает?
>>1411929 Не знаю, какой ты смысл вкладывал в свои слова, но если бы работаешь только с наследником - принимай его по ссылке. Если хранишь - храни указатель (может даже unique_ptr). Если собираешься работать с объектами-наследниками базового класса через его интерфейс, то делай то же самое, но с указателем/ссылкой на базовый класс.
>>1411979 Вижу, конечно, только опять же, при чем тут raii, если это просто про расположение в конструкторе и деструкторе инициализации\удаления объекта. Тут непонятна магия с оператором new. Каким образом буферы int и float самоуничтожатся после выхода из локальной области видимости?
>>1411970 Это же книжка про игровые движки? Там видимо переопределены аллокаторы памяти для int и float. Прога на старте хапает большой кусок из кучи и уже сама потом им манипулирует. В приведенном коде просто пример как это должно работать.
>>1412030 >>Это же книжка про игровые движки? Да, "Game Engine Architecture Third Edition Jason Gregory". Вроде понял теперь. Т.е. работает это примерно так: переопределенный new сдвигает head стэкового аллокатора, а когда аллокатор уничтожается(когда выходим из scope), то head возвращается на старое значение?
>>1412142 Почитай про RAII, смысл такой, что вместо того, чтобы явно выделять и освобождать память ты создаёшь объект, в конструктор которого передаёшь new(или в твоём случае аналог на стеке, раз стековый аллокатор у тебя), а в деструкторе delete(у тебя popallocator) и когда время жизни у объекта кончится вызовется его деструктор, в котором освободится память. Это безопаснее, чем ручками это делать, потому что во-первых можно забыть, во-вторых если между твоим new и delete где-то кинулось исключение, то пизда, будет утечка, а в RAII случае RAIIobj(new int(5)); ... throw 2; ... у тебя после выброса исключения пойдёт stack unwinding, программа будет как бы откатываться до try, то есть у всех созданных объектов будет вызван деструктор, в том числе и у RAIIobj и поэтому память освободится и утечки не будет. Это оче норм тема и поэтому такой подход используют повсеместно.
Сейчас приложение перемещает круг при нажатии на мышку (на её же позицию). Как сделать так, чтобы оно не просто меняло локацию одного PictureBox, а создавало новый, оставляя старую точку на месте?
Вот как в qt выполнить действие без события?Допустим я хочу чтобы как только я открыл программу label начал заполняться буквами. Но ui->label не работаетв main.cpp
>>1412967 Я могу выполнить действие используя событие (допустим нажатие кнопки). Но как выполнить действие без события? Запустил программу и сразу какая-нибудь функция заработала, как в консольных приложения. Тупо с первой строчки код выполняется.
>>1412982 Ну вызови вручную обработчик этого события, в чем проблема? Например, у QPushButton есть сигнал clicked(), если ты его подключил к своему OnClickMyButton(), то ничего тебе не мешает вызвать OnClickMyButton() самостоятельно. Если ты не знаешь, где вызывать, то вызывай там, где создашёшь.
>>1412982 Код и так с первой строчки выполняется. Только при вызове exec() приложение входит в бесконечный цикл ожидая события. Если у тебя есть ui, то я могу предположить, что это оконное приложение, и ты используешь дизайнер форм. Если это так, то ui - это член класса созданного окна. Присвоить текст лейблу можно в конструкторе, например, или прямо в дизайнере.
>>1412998 >>1412992 Допустим я хочу сделать цикл for и в нем приписывать по одной букве лейблу. Нахуя? Не знаю. Но я также не знаю как сделать это, что важнее.
>>1413001 Если ты напишешь обычный цикл, то не увидишь, как буковки появляются. Скорее всего тебе нужен таймер. Читай про QTimer, там скорее всего будет в примерах, как сделать то, что тебе нужно.
Странно, но эта хуйня работает. Вообще не понимаю. Говорят: main - главная функция, пиши в ней. Пишу в ней - не работает. Пишу в описании класса - работает.
>>1401309 (OP) возник вопрос, уже как бы не актуально но для общей эрудиции вот есть std::map, я его заполнил и хочу перебрать все ключи и объединить с похожими, это реально сделать? Ибо у меня после удаления элемента в цикле for (auto i: mapA){for (auto j: mapA){;}} что то шло не так и все ломалось я так понял это как то связано с итераторами которыея удалял, а через цикл for(int i=mapA.begin; i<mapA.end;i++) я так понял достучаться до значения по итератору шансов нет? и итераторы чет не поддерживают "="? Короче эту задачу можно было как то решить через map? или надо было использовать другой контейнер?
>>1413051 Ты видимо совсем глупенький, раз вместо книжечек и мануальчиков слушаешь всяких дядек. Какой критерий "главности"? >>1413054 Не уверен что с std map это прокатит, но обычно так пишут for (auto it = myMap.begin(),...) { ....if (isSame(...)) ........it = myMap.erase(it); ....else ........++it; }
>>1413068 вот тут у меня непонятки, после erase() что происходит с итератором? если они последовательны(++it, myMap.begin <it< myMap.end) то после удаления он должен сместиться?
Почему QT взлетел? Дрисня же, которая тянет за собой несколько ДЕСЯТКОВ метров зависимостей. Сама среда разработки, говорят так себе. Нарушает концепции самого С++. Почему это говно юзают?
>>1413232 >Почему QT взлетел? Потому что остальное для клепания формочек на крестах еще хуже. А здесь годная система сигналов-слотов, а не ебучих колбеков, как везде. >Нарушает концепции самого С++. Какие? >Почему это говно юзают? Не хочешь - не юзай, никто не заставляет.
>>1401309 (OP) Анон, а как сейчас программируют на C++? Когда я работал программистом-формошлёпом на C++, всё собирали с помощью qmake и гуя QtCreator'a. А как делать правильно? То есть, как делают в Big-N компаниях и всем таком? Пишут мейкфайлы, как в 80-х? Используют CMake? Не используют C++?
>>1413523 где как. в крупных компаниях, где проекты большие, обычно пишут свой сборщик (ну или кастомизируют какую-нибудь систему автосборки под себя). Понятия "как правильно" - нет, каждый собирает как хочет. У нас вот cmake был сначала, потом на него забили и написали свой билдер, так на нём и сидим до сих пор.
>>1423009 лямбда неявно разворачивается грубо говоря в структуру с перегруженным оператором () и членами, который ты захватил. Без захвата - в указатель на функцию. Поэтому лучше юзать std::function<T>
Аноны, реквестирую способы перестать орать с Майкрософта. Где среди тонн документации по HTTP Server API найти имя сраного .lib файла, чтоб линковать с ним? Да да, я в консолечке погроммирую, и знаете, нравится, вкусно так, экзотично. Так вот, какого хуя никто все еще не ответил? А, я ведь пост не отправил, лол. Ща исправл
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯДЬ!!!!!!!! Почему WinHttpSendRequest шлет лишь ебучий глагол? Вот реально, вместо сервера запустил голую слушалку на winsock-ах, и прилетает только 4 байта "POST". Это пиздос, чините мой пердак, аноны!!!
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/