Вместо шапки - https://github.com/sosachbot/cppthreadhat/wikiОтветы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Анончики, подскажите какой-то более-менее большой проект, который можно реализовать в соло за 2-3 месяца всё лето свободен на С++/Qt. До этого чего-то серьёзного не писал, какие-то калькуляторы, шахматы и обработчики данных еще пару ботов для телеграма. Сейчас чувствую что очень не хватает практики, особенно современных крестов. С матаном/линалом знаком, дискретка на базе первого курса. Было бы очень неплохо, если бы проект был связан с компьютерными сетями и протоколами передачи данных
>>1401558Бля, видел в треде идей анона, но чёт даже не подумал об этом. Спасибо анончик. >>1401583 - над этим подумаю, но сама задача какая-то не очень интересная по крайней мере для меня.
>>1402298А в чём может быть проблема? В Qt достаточно удобные средства для работы с сетью, и клиент-серверная модель уже реализована.
>>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(в теле цикла переход через указатели от элемента к элементу), пока не дойдет до элемента с нужным номером, и потом выведешь значения, на которые указывает полученный указатель.
Аноны, можно где-то скачать старые build tools от визуал студии, скажем, 2005 или 2010 года? Не гуглится нихуя, жопа горит, щас пойду воровать, убивать, йебать гусей.
>>1402679Уже качаю полную студию, 5 гигабайт. Еле сдерживаюсь, чтоб не побежать в город обзывать каждого первого потребителя продукции МенструалсофтКорпорейшн говноедом и получать за это пизды. Это ж как, сука, надо смерти не бояться, чтоб не выпускать инструменты без IDE отдельным релизом.
Посоны, не гоните, просто не сталкивался с такими кейзами. Есть мой собственный класс, нужно по входным данным динамически создавать представителей этого класса, потом загонять их в массив и работать с ними. Как это реализуется?
>>1402735template<class T, class... Args>void do_smth(std::size_t n, Args&&... args){T^^ arr = new T^[n];std::for_each(arr, arr + n, [&](auto& p){p = new T(std::forward<Args>(args)...);});// do somethingstd::for_each(arr, arr + n, [&](auto& p){delete p;});delete[] arr;}Домик замени на звёздочку.
>>1402767Пример примененияstruct A{ A(int a, float b, char c) : a_(a), b_(b), c_(c){} int a_; float b_; char c_;};int main(){ do_smth<A>(10, 1, 2, 'a');}
>>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детальный ответ на твой вопросесли кратко - есть способы проектирования архитектуры приложения, когда вообще нет открытых виртуальных функций, такой подход сохраняет популярность
>>1402921А как ты получаешь длину строки для создания динамического массива, если ты не знаешь заранее сколько будет элементов в массиве?
>>1402931Да и с каких пор в школах учат программирование? Ещё и в восьмом классе. Да ещё и на крестах.
>>1402940Откуда динамический массив будет узнавать насколько ему расширяться, если ты ему не предоставляешь конкретное число, получаемое прямо во время работы программы?
>>1402944У тебя массивы прям как твоя мамка, а твой код наверняка может потягаться даже с поделиями индусов.
>>1402971язык 19ти летних полубогов, получающих на изичах 3к в месяц на удаленочкекрестоблядки же на такую зп годам к 35 выходят и то если вьябывать
Нет, ну так-то он прав. C++ это либо легаси, либо рокет саенс. Но рокет саенсом занимаются единицы из сотен тысяч, а остальные поддерживают какое-нибудь старье, написанное еще в то время, когда C# и Java не доминировали бэкенд и десктоп. Тем более когда джунам за JS или тот же Go платят больше, чем за C++ мидлу.
>>1402714Мне надо скомпилировать код, использующий библиотеку, которая в свою очередь скомпилировано майкрософтовским компилятором. Ставить для этого Шиндовз10 с .NET Framework 4.6 как-то неохото. Я вообще ни шага в разребании этой задачи не могу сделать, не пробубнев четырежды "виндоюзеры говноеды".
Возможно ли как-то при выполнении определённого условия просто в условии объявить переменную типа, который задаёт условие, и использовать эту переменную дальше в программе? А то они обозначаются как локальные и приходится код копипастом растягивать.
Как использовать сраный OpenGL? Везде в примерах пишут> #include <GL/glut.h>Но у меня тупо нет этого файла. Что делать-то?
>>1403171Это то, что твои пальцы должны набрать в гугле перед тем, как пойти нахуй, долбоёб.пиздец, при поиске ответа на вопрос не использовать гугл как первую инстанцию. выпились
>>1402922Можно считывать данные посимвольно и каждый шаг расширять массив на 1 элементбудет выдяляться новыц массив нужной длины и туда будет уопироваться содержимое старого - такое себе.занятиеМожно выделять память блоками по 256 байт например. А потом еще можно обрезать. А можно не обрезать, если тебе памяти жалко.
>>1403169Если не ошибаюсь, glut это более старая версия. Сейчас используется glad. Вот тут гайд неплохой, я по нему поставил в итоге https://learnopengl.com/Getting-started/OpenGL
>>1403180Может потому что glut уже лет двадцать не поддерживается? Или потому что это ОТДЕЛЬНАЯ БЛЯДЬ БИБЛИОТЕКА? Где ты вообще откопал код, который юзает glut? Ты хочешь буквы рисовать?
>>1403195Он хоть и грубый, но я с ним согласен. Тебе прямо сказали что надо гуглить, и ты вместо гугла задал вопрос анону. Даже если не брать во внимание саму тупость этой ситуации, как думаешь, кто тебе быстрее ответит - гугл или анон?
>>1403193>Где ты вообще откопал код, который юзает glut?Статья на хабре... 2011 года. Не обратил внимания на дату. Как я понял, сейчас вместо glut юзают freeglut, так? Мне нужно его самостоятельно собрать?https://habr.com/ru/post/111175/
>>1403217Вроде там бинарники выкладывают, но лучше конечно самому собрать. А лучше, как анон выше писал, перейти на GLAD
>>1403265Спасибо. Вот только бинарников я не нашел, но зато смог с горем пополам собрать эту срань с помощью CMake. А чем GLAD лучше freeglut?
Здрасте, можете пояснить за tls1.3, публичный, приватный и CA сертификаты, откуда они берутся, и что надо иметь клиенту, чтобы взаимодействовать с сервером?
Из C++ в C# пжпжпжvoid __fastcall TForm1::Button1Click(TObject Sender){Memo1->Lines->Clear();int A[4]; int B[5];int m;String One, Many;for(int i = 5000; i < 10000; i++){One = IntToStr(i);for(int j = 0; j < 4; j++)A[j] = StrToInt(One[j + 1]);if(A[0] & 1) continue;m = i 2;Many = IntToStr(m);for(int j = 0; j < 5; j++)B[j] = StrToInt(Many[j + 1]);if((B[1] == A[3]) && (B[2] == A[0]) && (B[4] == A[0])){Memo1->Lines->Add("ОДИН - " + One);Memo1->Lines->Add("МНОГО - " + Many);Memo1->Lines->Add("");}}}
БЛЯДЬ, ПОМОГИТЕ ДЕЛЬФИНИСТУ В СТУДИИ ОТ МЕЛКОМЯГКИХ.Какого блядь хуя ей надо - то, а ? В Delphi я спокойно могу из одной формы, например, ебануть visible другой формы. Forname.visible ... траляля. Здесь же, сука, нихуя не получается, это говно ноет и срет ошибками. Как мне их одной формы убить другую, изменить что - то хотя бы
>>1403703Вот сука, банально блядь. Как же в этой ссаной студии все через депу сделано сука. Берем елемент нейм, хуяим ему метод- событие. Переименовываем элемент нейм. А событие так и останется с прошлым именем. Вот блядь, какой даун это придумол сука.
>>1403704С этими же формами. Какого хуя у меня в таком хуевом object basic это делается одной строчкой, а здесь я должен гуглить, объявлять их друг у друга, ебаться с сылками и статичностью. Тьфу, блядь, ебля ради ебли as is
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зачастую оказывается достаточно написать обобщенную свободную функцию, которая принимает итераторы, что поддерживает этот контейнер и всенапишешь что за функционал тебе нужен, может напишу и требуемую функциюа вообще от контейнеров не наследуются, а агрегируют иха делать как ты предлагаешь - вообще нехорошо
>>1403728мда хех timer = startExecution("single-thread");stopExecution("single-thread", timer);MatrixMult(A, B, C);
https://www.sql.ru/forum/1312623/nachinaushhiy-s-s-lua-programmist-20t-r-50t-r-moskva-vozmozhno-udalyonnoджун на крестах, 20 тр в москвенужно выполнить тестовое задание, а именно: реализовать пул памяти, используя virtualalloc, срок выполнения - три днявелком
>>1404044>>1404110С другого лагеря тоже доставляют>Для юниоров по Москве средняя в районе 100 тыс.>В стартапах зп должна быть выше рынка
Сап двач,как можно получить символ юникода в 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к. Хотет перекатиться в ДС. Только хотелка съеживается, как до поиска работы дело доходит.
>>1404110Сложно что-ли? Обычную обертку над винапи просят написать. Такое каждый джун должен уметь делать. Для 50к норм работа.
Обьясните, пожалуйста, как работает этот фактори паттерн?Есть условный shape, есть circle и triangle.Создаю я фактори для них c createShape и т.д. В коде создаю вектор shape и пушбэкаю в них через circle\triangle_factory. Вроде бы все работает и красиво, но если в конструкторах circle и triangle разное колво аргументов? Как заставить все работать с createShape с разным колвом аргументов?Так же если у меня в circle условно дополнительные переменные и сеттер\геттер, как мне к ним получить доступ? После пушбека в массив v[0]. видит только функции с Shape но никак не с circle\triangle. Подскажите плз, всю голову сломал уже. (И да, использование фактори обязательно и принципиально)
>>1404516vector<shape*> v; v.pushback(circle_factory->createShape());v[0]. и вот тут видны только функции с shape, как мне обнаружить еще и с класса circle?
>>1404521dynamic_cast<Circle звездочка>(v[0])Но если ты знаешь, что там будет именно 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 я прописал некорректно, получается осталось разобраться что нужно коннектить чтобы данные передавались именно во второе окно.
Поясните, почему во многих алгоритмах граф задается какvector < vector<pair<int,int>> а не< vector<pair<int,int>>
>>1404509на твоем уровне понимания можно просто перегрузить createShapeа вообще это требует виртуального конструктора, прямой поддержки которого в с++ нет и обычно реализуется через паттерн фабричный метод
>>1404681Это и есть матрица смежности, просто ее разреженный вариант (sparse vs dense). Лучше экономией памяти, если у тебя граф большой и имеет мало связей, не нужно нули хранить.
>>1404470Да что там писать-то? Винапи если знаешь нужные и ООП основы, то за 1 вечер написать можно. Хуй знает что ты там аж 3 дня собрался писать.
Аноны, выручайте, делаю список студентов по имени и фамилии, не получается сортировка по первой букве имени. Без динамического выделения памяти.Я точно знаю, что ошибка в инициализации массива указателей на имена, только где эта ошибка хуй его знает. Сразу говорю, что только только вкатился в ООП, поэтому не шарю практически нихуя, начал изучать наследование. https://pastebin.com/AedmXB9d
>>1404875должно быть как минимум temp[j][0] < temp[min][0], потому что ты сравнивать должен первые символы, а не указатели на строки.А так вам дали std::string, а вы ебетесь с указателями. Ну ебитесь
>>1404883Кстате в ифе делал через ★temp[j]<★temp[min] что эквивалентно тому что ты написал, но тож не получалось
>>1404892Пробовал ещё просто в цикле в отдельном методе выводить имена, в итоге выводилось куча букв М и в конце первое имя и так на каждой строчке
>>1404470Под "пулом" я понимаю fixed-size block allocator. Если пул не растущий и размер фиксирован, то за пару часов можно спокойно реализовать, если понимаешь принцип. Выделяешь память на N страниц, создаёшь где-то фри-лист (или в самих ячейках хранить, как емнип делает dlmalloc). new - снимаешь с листа, free - выдаёшь с листа. Всё, он даже уже почти thread-safe, раскидать атомиков только. Если растущий пул, то надо ещё логику управления выделенными страницами, не очень сложно. Но вот если случайный размер (general purpose allocator), тогда дело сложное. В принципе можно просто добавить к предыдущей реализации слияние смежных блоков, чуть подкрутить того и сего, но если ты хочешь действительно хороший аллокатор, тебе предстоит веселиться с политикой нахождением блока (best fit, first fit, разделение на бины), фрагментацией и скоростью всего этого дела. Но его и не просят, так что не парься.Быстрое гугление навело на Доббса, где приводится код growing fixed-size block allocator, где фри-лист хранится в самих ячейках. http://www.drdobbs.com/a-quick-and-simple-memory-allocator/184403440
>>1404907одна из главных фич пулов памяти - это то, что его легко снести когда станет ненужнымтакая модель хорошо ложится на некоторые типы задач, когда проэкт на сях написанно я не понимаю как сделать полезным эту фичу в крестахвидимо, поэтому пулы памяти в крестах и не прижилисьно это все мои догадки, тк на практике я их не делал и не применялвот ты пишешь что сделал бы за 2 часа, а я, хотя и понимаю что надо делать, делал бы месяца 3, не меньше
по сути, выгоду по скорости пул памяти дает не при выделении памяти, а при освобожденииплюс экономится размер памяти за счет того что внутренние обслуживающие структуры памяти меньше размера занимают (не надо размер блока помнить, он фиксированный)
>>1404966>такая модель хорошо ложится на некоторые типы задач, когда проэкт на сях написан>но я не понимаю как сделать полезным эту фичу в крестахКакая разница, на чём написан проект? Пулы и аллокаторы используются всегда для одних и тех же целей: уменьшить число аллокаций, когда у тебя много мелких объектов одного типа постоянно приходит и уходит. Неважно, Си, Плюсы. Пулы объектов даже на джаве были (хотя с новыми JVM особо и не нужны они).>вот ты пишешь что сделал бы за 2 часа, а я, хотя и понимаю что надо делать, делал бы месяца 3, не меньшеТы три месяца будешь делать 1 (один) связный список?
Доброй ночи, аноны. У меня есть два вопроса к разработчикам на крестах:1) Как обстоят дела с вакансиями в вашем городе (не беру в расчет ДС/ДС2) для новчиков без опыта работы. Например, в моем городе (Ростов-на-Дону) таких вообще нет. Все в основном от мидла и выше. Так вот вопрос - как начинают свой путь программисты на C++? Неужели переходят с других языков? Хотя мне казалось, что его многие учат первым. Я, например, в универе его учил первым по программе.2) Для программирования в никсах вообще стоит рассматривать C++ сейчас? Или же до сих пор все модули - это чистый C, в большинстве своем?
>>1405024И вдогонку вопрос: какие целевые области применения для разработки на крестах вы видите на данный момент?
>>1405028Значит ли это, что сейчас в кресты вкатываться не имеет смысла даже уже имея какое-то минимальное представление о программировании на них
>>1405024>Так вот вопрос - как начинают свой путь программисты на C++Несколько лет сосал хуйцы на госзаводе. И даже там я не был джуном. Со всеми проблемами ебался сам, на качество моего кода всем было похуй. Но я дохуя читал хороших книжек. А кто не читал до сих пор на этом заводе.>Для программирования в никсах вообще стоит рассматривать C++ сейчас?Ты про никсы или про ядро никсов? Потому что это две большие разницы>>1405034Это примерно как пойти в макдак сейчас или поучиться и пойти в макдак стать специалистом. Кресты это высокий порог вхождения, со всеми достоинствами и недостатками. Работа будет.
>>1405034Не вижу особого смысла. Очень несовременный язык, который применяется либо в легаси десктопе, который писали ещё тогда, когда кресты не проиграли эту нишу шарпу, либо в рокет саенс, где надо нереально въебывать и очень хорошо разбираться в математике или архитектуре пк. В первом случае зп нищенские, во втором на уровне джавистов, ненапряжно пишущих круд.
>>1405099>джавистов, ненапряжноБабка на двое сказала.Мне, например, общество математиков куда как более приятно.
>>1405108Просто не всем приятно заниматься тяжёлым интеллектуальным трудом, а получать на уровне крудошлепа. Кресты это призвание.
Всем спасибо за ответы>>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 читать хорошие книжки.
Поясните, что хочет этот код? В каком формате ему кормить stdin? while (scanf ("%d%d", &n, &m) == 2) { for (int i = 1; i <= n; i++) { int a; assert (scanf ("%d", &a) == 1);... }
>>1405935Причем тут кресты, это сишечка.Первому сканфу кормишь два целых через пробел, второму просто целые.Делает непонятно что.
О Makefile'е вопрос.Зачем в зависимостях таргета ставят "Makefile"? То есть,>build/main.o: main.c Makefile> $(CC) ....Что тут делает "Makefile"? Всё работает и без него. Заггулить невозможно, все ответы просто о таргетах в makefile'ах, а не необорот.
>>1406260Таки нагуглил, всем спасибо.https://stackoverflow.com/questions/14601721/makefile-as-a-dependency-for-a-make-target
>>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но дзен заключается в том, что шаблонное метапрограммирование ты изучаешь не более чем как для собственного развлечения, типа такое хобби, на практике ты его врят ли будешь применятьте нужно принять то что ты просто так развлекаешься и смириться
Аноны, кто-нибудь вкурсе, почему ReshapeFunc реагирует не только на изменение размеров окна, но и на КЛИКИ?
>>1406476glut\freeglut\flfw\sdl2 и тд и тп это библиотеки для создания контекста. То есть окошка и обработка сообщений от ОС: клавиатура\мышка\джойстик и тд.Там, конечно, не только этот функционал. Разработчики добавляют что-то своё.Glut\freeglut не рекомендуется использовать. Они устарели и давно не обновлялись.
>>1406508glad и glew это библиотеки которые подгружают расширения для OpenglЧтобы тебе каждую функцию писать вручную не пришлось.Почитай основы: https://github.com/glcoder/gl33lessons
>>1406334>, на практике ты его врят ли будешь применять>те нужно принять то что ты просто так развлекаешься и смиритьсяНе проецируй=)
Как за неделю освоить кресты, чтобы сделать лабы в вузике и ргз? Препод сам программистом работает, и поймёт если я ничего не знаю.
Аноны, объясните за статическую память, что это за заверь? Есть стек, есть куча, а это че за хуйня?[code]for(;;) { static int c=0; c++;}[/code]Где этот статик вообще бля??
Аноны, подскажите как изменить структуру проекта чтобы стало по человечески, а не laba1.cpp. Есть проект, в нем сущестует 3 класса - два из них являются составляющими шахматы пишу, клетка и фигура, а один - общий доска шахматная. Но в первых двух классах нужно вызывать методы родителя при перемещении фигуры нужно проверить что на клетке нет других фигур например, и пару слотов коннектить. Сейчас храню в каждом классе указатель на общий, но понял что это какое-то хуёвое проектирование, раз приходиться так делать. Подскажите как можно переделать, чтобы составные классы не смогли навредить общему, если что-то пойдет не так
>>1406576Пикрелейтед>>1406582Выделяется при старте программы, освобождается при выходе>>1406588Класс фигур с енумом в качестве типа фигуры чтобы можно было повышать пешки. Хранят также был ли первый ход, опять же для пешек.Двумерный массив с указателями на фигуры в качестве доски.Класс контроллер определяющий возможные ходы, хранящий была ли рокировка и ТПНаверное ещё класс ход для визуализации, записи партий и отката ходов.
>>1406582По идее это стек, но static используется, чтобы локальные переменные имели время жизни такое же, как глобальные переменные.
>>1406576писать в структурном си стиле: только функции и базовые управляющие конструкции - циклы и ветвлениякак то так
>>1406549если ты способен применить техники шаблонного метапрограммирования на продакшене, четко осознавая что есть в этом необходимость, то за твой скилл и твое место работы можно только порадоваться-позавидовать
>>1406650Нет, фигура отдельный абстрактный класс. А доска обьединяет в себе фигуры и клетки. Но изнутри фигуры мне нужно обьединить сигнал Qt-шный с слотом доски, и вызывать некоторые функции при построении вектора для хода/атаки фигуры. Вот недавно какой-то баг обнаружил, что фигура при инициализации делает какую-то хуйню с доской которую я передаю по указателю, в результате чего указатель не равен nullptr, но при этом данные его не валидны, и при попытке вызвать какой-то метод программа крашится с SEGFAULT. Потому и спрашиваю, как можно огранизовать иерархию классов, чтобы фигуры и клетки не могли навредить доске, но при этом имели доступ к ее методам. Книжку про паттерны я не читал
>>1406719Я пока сам только осиливаю ООП, но попробовал бы так: есть класс клетки, который может быть черный/белый, пуст/занят, такой-то фигурой, если занят. А ещё лучше - внутри указатель на объект класса "фигура", в котором записана своя логика ходов и всего остального, если он nullptr - то клетка свободна.А доска - это класс, наследующий от контейнера, содержащего объекты класса "клетки", т.е. вектор векторов клеток и доопределенные методы, чтобы объекты класса "игрок" дёргали свои фигуры.Но я только учусь быдлокодер, потому эта схема вряд ли хороша.
>>1406723> потому эта схема вряд ли хороша.Да нормальна. Ни к чему все эти усложнения. Доска обычный массив структур. Структура (как ты и описал) имеет цвет, какой-нибудь внутренний индекс для расчёта ходов, указатель на фигуру.
>>1406719Иерархия классов против SEGFAULT не поможет. Ты просто хуйню какую-то делал. Ограничивай количество действий которые можно сделать через публичный интерфейс. К примеру если тебе нужно чекать может ли какая-то фигура перейти на какую-то клетку, то ты вызываешь метод доски который это чекает. А не вытаскиваешь (через указатель на доску) кучу инфы (например о других фигурах) в метод фигуры и там ковыряешся потенциально что-то ломая. Можешь ограничивать доступные методы. Например, если твоей фигуре от доски нужены только методы "проверить возможность хода" и "переместить меня", то ты можешь создать абстрактный класс BoardDelegate (например) с двумя этими методами, доску отнаследовать от нее, а указатель на доску в классе фигуры объявить не как указатель на доску, а как указатель на BoardDelegate. И тогда твоя фигура сможет вызывать только этих два метода доски.
Сап, анон. Возникла задача визуализировать дискретно отходящую графику условно с датчика на крестах. Проект без qt, только буст. Сейчас вывод был в .bmp в папку, но нужно все же в динамике, да и сохранять на диск пиздец как не хочется. Визуализация не для конечного потребления, больше как для изучения.Какой путь лучше выбрать?Использовать Vulkan (opengl, directx)?Или же как-то сохранять в numpy массивы, а затем загружать в питон?Или лучше сразу написать враппер моих классов для того же питона, и там уже сделать визуализацию?
>>1406729Да баг с сегфолтом я уже нашел и пофиксил, просто после него задумался об проектировании, чтобы таких ошибок изначально не возникало. Про делегат спасибо, сейчас что-то такое попробую сделать
>>1406576https://ravesli.com/uroki-cpp/Читать и пробовать. Но за неделю ты много не изучишь. Готовься к пересдаче лучше.
>>1406729> создать абстрактный класс BoardDelegate (например) с двумя этими методами, доску отнаследовать от нееГде про подобное можно почитать по подробнее?
Есть лаба по компьютерной графике. Надо вывести пиксель в консоли. Но putpixel не работает. Что делать?
>>1406793надо перевести терминал в какой-то там видеорежим, но это типа древняя хуйня, короче, можешь курить borland C через DOSBox,а можешь левую графическую либу юзать, но это не точно, сосите хуй, честь имею
Как вкатиться в функциональщину с констэкспрами, темплейтами и прочими фишками? Нихуя не понимаю. Хочу был компилтайм богом. Есть гайды какие на русике?
>>1406856дзен заключается в том что раньше (до новых стандартов) в метапрограммировании на шаблонах приходилось использовать техники функционального программирования, а конкретно:метавычисления на типах вообще не могли изменять состояния своих сущьностей, которыми оперировали, тебе приходилось не изменять состояние, а производить новые состояния; метавычисления на значениях были оче ограничены и ты тоже мало мог че поделать, тоже приходилось не изменять, а порождать новые значениявместо итерации приходилось использовать рекурсиювместо условного оператора приходилось использовать по сути вариант патерн-матчинга в виде комбинации частичных специализаций и sfinaeв новых стандартах многие метавычисления (как на типах так и на значениях) уже можно делать императивным способом, так гораздо наглядней и понятней получаетсяэто то что касается компайл-таймреал-тайм лень расписывать
>>1406880ебанись, ни в одном вузе такой обскур тебе не будут рассказывать, студентосы просто вообще не врубят че это такое, нах
>>1406873Я слышал что это язык для олдов с опытом программирования от 5 лет и ньюфаги его не осилят... Мне базовые понимания нужны, чтобы в ногу со временем идти так сказать.>>1406886Вот это ты загрузил меня. Накидайте лучше материала какого, а я уже сам ковырять буду.
>>1406643Хуйню какую-то написал. Есть сегмент данных, размер которого фиксирован, есть сегмент кучи, который идет за ним в адресном пространстве, и есть сегмент стека, который растет с верхних адресов вниз.
>>1406891берешь boost.hana, разбираешься, смотришь зачем, смотришь как внутри сделанопонимаешь что это нахуй не нужно, а только поигратьсявсе
>>1406906Ну сорян, таких подробностей не знаю, я читал про постоянную память(она была может быть условно в книге стеком обозначена) и динамически выделяемую(кучу). И он тоже спросил - стек или куча?>>1406898Что за баг, и на каких версиях присутствует?
>>1406927https://developercommunity.visualstudio.com/comments/583321/view.htmlОтветы разрабов это вообще пиздец
>>1406906Ответ от домохозяек для домохозяек. Ты хоть про какой формат исполняемых файлов, ос и рантайм говоришь?
>>1406898>баг в студииПричём тут иде вообще к языку? Я вообще иде не пользуюсь, build.sh в сосноли запускаю и всё.
>>1407065Причём тут лабы, лол, я про рабочий проект. Ты может охуеешь, но для конпеляции не нужно вообще ничего, кроме конпелятора.
>>1407065Вообще чего тебе такого даёт иде? Для редактирования есть тот же vs code, для отладки gdb. И смысл в иде?
>>1407065К тому же там инклюды какие-то вонючие подключаются ( stdafx.h) и есть отличия от стандарта и баги как выше писали. Одни минусы и ноль полезности при злоебучей тяжеловесности. Такое говно. А ты говноед.
>>1407094>отличия от стандартаhttps://docs.microsoft.com/en-us/cpp/cpp/nonstandard-behavior?view=vs-2019По сути пользуясь их иде ты пишешь на некотором диалекте плюсов, короче говно говно говно.
>>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 и никакого бугурта, а тут за тебя решили как тебе удобнее, меня такое отношение бесит, например.>Сколько раз из-за этого расхождения у тебя что-то не получаласьНисколько, я не юзаю микрософтовский компилер потому что.>На то он и баг,Не относится он потому что чувак спрашивал про С++, а С++ <=> стандарт, чем является ключевое слово статик в имплементации мелкомягких и где там у них баги дело десятое, понимаешь? А ты так написал(или не ты, тот анон в общем), будто плюсы равносильно визуал студии, на мой ответ с доходчивой табличкой со скоупами/временем жизни/линковкой ответ был мол скажи это студии, чего блядь, причём тут ИДЕ вообще? Я считаю, что у меня полыхнуло совершенно обоснованно.
>>1407136Визуал студио пользуюсь и компилю там же. Не понимаю дебилов, которые сидят на clang'e на какой-нибудь пингвибунте и дрочат вим.
>>1407144Устаю, дома не часто что-то пилю, но бывает нахлынет вдохновение допилить недопиленное, ну ты понел.
>>1401309 (OP)Помогите все разумные способы написания "Вuжуал Сtyдия" придумать, не могу автоскрытие настроить, то и дело какой-то ребенок со своим WinAPI прорывается, и из треда сразу выйти хочется еще на 20 реинкарнаций.
>>1406907а я понял, что бы эту переменную не зашкварили снаружи, на хуй так надо делать? Что-то вроде замыкания?
>>1407180Это чтобы функция сохраняла значения каких то параметров от предыдущего вызова этой функции. Это еще в сишке сделали, например чтобы функция генерации псевдослучайных чисел использовала предыдущее значение для генерации следующего, и хранилось бы оно только в одном месте.
>>1407180статик переменная даёт статическое время жизни, она создаётся в начале программы и живёт до самого конца программы
>>1407185брат, вот за такое я очень благодарен, охуенно, теперь понял зачем это нужно, брат, где ты такое прочитал? А то в большинстве учебников написано "что", а не "зачем".
>>1407237>создаётся в начале программытам вроде гарантируется только то, что будет создана до первого использования. Точный момент создания не регламентирован.
>>1407136Компилирую MSVC под винду и gcc под юникс. Честно говоря, не вижу особой разницы, ибо весь проект симейком управляется. После генерации на любой ОС остается нажать одну кнопку для полного билда.
>>1407700Свое приложение, а не чужое. Ты меня не правильно понял. Допустим, в дебаге весь жизненный цикл программы прокликал, все работает, а релиз версия крашится, где-то неопределенное поведение. Как дебажить?
У себя на компе програ нормально компилится и работает.Отправил прогу другу. Нормально компилится, но работает неправильно. Там вместо нормального числа образовался nan.Дело в компиляторе? У меня линукс и дефолтный code bloks. У друга мак. Есть какие-то флаги, которые надо поставить перед компиляцией, чтобы прога нормально работала на любом железе?Сам использую просто // g++ -std=c++11 name.cpp
>>1407702Читать-прогонять полученный асм. Лично я такой баг однажды так и не нашёл после целого дня поиска. Отключил оптимизацию во всём файле, где была ошибка, и забил.
Начал изучение шаблонов, захотел реализовать шаблонный класс, который позволит обрабатывать одномерный массив любого типа, где я обосрался, и как правильно сделать?
>>1407891Шаблоны нельзя писать раздельно в хедере и файле реализации. Вся реализация должна быть в хедере.
>>1407935https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-filehttps://isocpp.org/wiki/faq/templates#templates-defn-vs-decl
>>1407934в стандарте 98 были прописаны 2 способа - модель включения и экспорт шаблоновно оказалось что экспорт шаблонов крайне сложно реализовать в компиляторе (пара реализаций все же была) и при этом их полезность оказывается сомнительнойоб этом подробно писал саттер в "новых сложных задачах на c++"
>>1407854Тыкать пальцем в небо такое себе занятие. Мне нужен проверенный вариант.>>1407674>>1407834Спасибо, анонам. Включил генерацию асм листинга и мапы.Еще нагуглил прикрутить туда WinDbg, все супер.
>>1408083>Тыкать пальцем в небони один дебаггер тебе не скажет, что ты забыл обнулить структуру перед использованием. Попробуй мозгами пошевелить чтоле
Аноны, есть прога с использованием функции qsort, которой там быть не должно. Можете подсказать как от нее избавиться?Выглядит так:qsort(&points[1], n - 1, sizeof(Point), compare);
>>1408105Если я правильно понял значения её аргументов то:using std;sort(++begin(points), --end(points), compare);
Драйверописатели тут? Поясните почему WDK не поддерживает STL? Там же по факту нужно просто реализовать несколько ключевых функций и все должно заебись работать. Типо в new malloc заменить на ExAllocatePool, и в delete free заменить на ExFreePool. Ну может ещё в нескольких функциях поменять методы создания потоков/объектов синхронизации. Почему мне при написании драйвера приходится жрать говно и не иметь ни динамического массива, ни строк, вообще нихуя и это в 2019, сука, году.
>>1407060Короче я не послушал всех и сериализовал в бинарник, и выцепил в великолепном питоне через numpy. Потом может прикручу враппер, больно уж годная связка выходит
>>1407136Визуальная студия, и qt с ней же. На шинде заметно шустрее мингв. Проект ща мсвцшный, но запараллелен с cmake, хоть в нем мне сложна.
Что не так с развитием цпп? Хочу использовать везде шаблоны, но прога собирается вместе с бустом просто пиздец долго, и это на i7 на всех ядрах.
Аноны, а msvc с современным языком и всякими stl даёт какую-нибудь векторизацию и распараллеливание само? Я не хочу сам писать треды и обосанные мьютексы, а для асинка я пока слаб. Почему, если компилятор видит, что для каждого элемента вектора надо сделать +1, нельзя это как-то в параллель?
>>1408305vs хреново с ним дружит, не было в начале 17й студии неких вещей типа профайлера. Не знаю, как сейчас.>>1408309Спасибо, включу, с института на автомате выключал
>>1408311>распараллеливаниеВ 17х появилось ExecutionPolicy для многих алгоритмов, правда я нигде не видел, чтобы их кто-то использовал. >векторизациюЛюбой компилятор может только самую примитивную векторизацию сделать. Как говорится, _mm256_pishi_sam_pd();>Я не хочу сам писать треды и обосанные мьютексыПиши CAS циклы и wait-free алгоритмы.
>>1408293Потому, что STL инклудит очень много всякой хуйни. Теоретически - ты можешь "вычленить" нужные тебе контейнеры, практически - очень тяжело.Мы написали свою строку, вектор, лист, хэш таблицу и всякие мутексы\локгварды.Зато трайп-трейты в кернел просто копипастятся без проблема.>>1408324> потому что шаблоны в ядре юзать совсем не комильфоКто тебе такую хуйню сказал?
Ну ананасы, помогите с исключением функции sort из кода, лабу надо сдавать, а я не ебу как ето сделать.http://cpp.sh/6skm793 строка
>>1408330>Кто тебе такую хуйню сказал?Хуйня - это когда говнокодеры тащат в ядро плюсы с stlями, эксепшенами и прочей ебалой, а адекватные будут писать на C.
Бля, пацаны, я вот выучил плюсы, писал тут недавно по этому поводу, ну и я не придумал короче, что дальше делать, ну и короче что вы думаете? Взял да и давай маерса читать. Бля! Я охуел! Я ж нихуя не знаю! Я ж говнокодер бля! Оказывается, на плюсах писать и собака может, а вот уметь писать ексепшн-сейф код с адекватной инкапсуляцией и к тому же производительный это голову иметь нужно! Пиздец!
>>1408363не суди по себе, дружок. Мне клованов на работе хватает, которые свято верят в то, что 6-ая студия генерит самый быстрый код, а все что позже 8-й нахуй не надо. А тут еще ты со своими шаблонами в дровах.
>>1408365Все хорошо, бро. Все крутые люди когда-то крутыми не были, погружайся в сабжекты, строй таски и улучшайся, не все же время uznay_ebal_li_ya_telku_s_takim_imenem.c компилить.
>>1408403О, да. Скажи, когда на тебя лает собака на улице, ты становишься на четвереньки и лаешь ей в ответ?
>>1408405>эти нелепые омежные оправдания>эти риторические вопросыВерный признак лоха по жизни, кстати.
>>1408332Но ведь как раз таки на си больше шансов допустить ошибку. Деструкторов нет и ты сам должен освобождать всю выделенную память -> большой шанс забыть про это и получить утечку.
>>1408502Ты отвечаешь человеку который на вопрос про шаблоны пишет про эксепшоны. Следовательно он или тролль, или дебил, а ты дебил, что его коментишь.
Объясните почему вот такая хуйня работает:int some_number = 5;auto func = [&]() ->int{ return some_number +=2;};some_number = func();А при передаче этой лямбды в другую функцию требуется обертка в виде std::function, т.е. вот это не работает:using func_ptr = int(звездочка)();void test(func_ptr func){ func();}test(func); //ошибка компиляцииЧто такого магического делает std::function, что заставляет это работать?
>>1408542Внезапно, оборачивает лямбду.Либо принимай std function, либо делай функтор шаблонным параметром
>>1408542Лямбда это не функция, а функциональный АБ ЪЕКТ, логично, что твой указатель на функцию это вообще другой тип.
>>1408542#include <iostream>auto func = [](int& a){ return a +=2;};using func_ptr = int(*)(int&);void test(func_ptr f, int& a){ f(a);}int main(){ int a = 0; test(func, a); std::cout << a << std::endl;}Алсо если ты не капчуришь переменные извне, то у лямбды есть конверсия к функшн поинтеру, так что вот так сработает, например.
>>1408542>a ->intЯвное указание выходного типа теперь избыточно.>using func_ptr = int(звездочка)();>void test(func_ptr func)>{>func();>}И вообще типы лучше нигде явно не указываться если это точно не требуется:auto test = [](auto func) { func(); };И кстати лямбда - это выражение языка, описывающее замыкание, а не само замыкание.
>>1408576А какой типо тогда у этого объекта? Как мне кастануть к нему, сделать указатель на такой объект? При наведении курсора на него, показывает что-типо lambda []... , но к такому типу нельзя привести.
>>1408584А почему то что я захватываю туда что-то вообще имеет значение? Оно туда при компиляции идёт как дополнительный аргумент или что?
>>1408585Ну аргументы лямбды Я указываю т.к. если это объект то при попытке доступа к методам или полям этого объекта студия не показывает список со всеми этими свойствами и приходится их вручную самому писать, а не 2-3 первых буквы и дальше стрелочками.
>>1408599>А какой типо тогда у этого объекта?У каждого компилятора свое внутреннее представление о типе лямбды если интересно узнать какой именно тип, то читай Маейрса "Эффективный и современный С++", поэтому при присвоении лямбды переменной нужно писать auto или std::function (но в этом случае будет просто неявный каст, поэтому так делать нужно, если очень надо). А для твоего случая лучшим вариантом будет сделать через шаблон:template<typename Functor>void test(Functor func){func();}И компилятор сам разберется, что ему подставлять.
>>1408588Ну и что не так с экспепшенами? В ядре тоже обработка исключений. Даже несмотря на то, что их можно просто не использовать, разве нельзя приделать их поддержку?
>>1408643SEH - это слегка другое, и он не сочается с С++, т.к. не может разматывать стэк, если присутствуют обьекты с деструкторами
>>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 thesame 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);
>>1408900Сделалwhile (i <= j) { while (Comparator(a, v) == true) ++i; while (Comparator(a, v) == false) --i; if (i >= j) break; swap(a[i++], a[j--]); }Теперь
>>1408899Вернее как, написал decltype(func(0)), вернуло инт и я такой, ну да, деклтайп не поможет. Пхах, бывает.
Как инициализировать си-строку в структуре?Литералом норм получается, а переменной никак.https://onlinegdb.com/HJe_DI-apN
>>1409064>не жрать говно и использовать wstring?Не могу, у меня WinApi головного мозга, там иначе никак>memcpy?Это значит, что через фигурные скобочки никак не получится? Только руками в каждый член присваивать?
>>1409067>Это значит, что через фигурные скобочки никак не получится? Только руками в каждый член присваивать?Пишешь конструктор и не ебешь мозг. И лучше использовать std::copy вместо memcpy.
>>1409060Обычные массивы не присваиваются друг-другу. Используй конструктор присваивания, в котором вызывай спец. функцию для копирования.
>>1409060Тупо сделай конструирующую функцию, напримерwchar_t t1[] {L"213123"};wchar_t t2[] {L"2126783"}; auto makeSample = [](bool fl, gsl::span<wchar_t> s) { Sample sam; sam.flag = fl; using namespace std; copy(begin(s), end(s), begin(sam.caption)); return sam; }; auto s1 = makeSample(true, t1); auto s2 = makeSample(false, t2);
>>1409074функцию напиши. В WinAPI жи есть CString, который под юникодом спокойно преобразуется в std::wstring в обе стороны
Допустим, есть какая то линия из пикселей, не обязательно прямолинейная. Как построить линии из каждого пикселя этой линии, перпендикулярные основной линии? Кажется это называется нормаль или как то так? Есть какие то готовые методы или формулы?
>>1409432Причем тут С++? А так нормаль к кривой в данной точке это перпендикуляр к касательной в данной точке. А касательную уже легко найти, найдя производную. Но матанализ был 9 лет назад, поэтому могу наврать.
>>1409441> А касательную уже легко найти, найдя производную.Это я знаю. Но это работает, только если известна формула графика функции. А у рандомной нарисованной кривой формулы нет.
Почему люди не пытаются сэмулировать(wine)/переписать win32 для линукса и запускать приложения, изначально которые для винды написаны?
>>1409432У тебя есть три точки. Точка через которую нужно провести нормаль и две соседних. Проводишь одну касательную черех центральную точку и соседнюю, и вторую касательную через центральную точку и второю соседнюю. Находишь среднюю между ними - от нее строишь перпендикуляр. По формулам - у тебя есть формула прямой проходящей через заданую точку. Все будет упираться в нахождение коэффициентов (наклона прямой) k. Находишь коэффициент первой касательной (по двум точкам - вычитаешь соотвествующие координаты друг из друга и делишь), находишь коэффициент второй касательной. Потом тебе нужно продумать как именно высчитать средний коэффициент. Потом делаешь над ним очевидные преобразования (чтобы получить перпендикуляр) и всьо.
>>1409455Я чето не понял твоего поста. Так вайн - это и есть попытка сделать Win32 подсистему для гану-луникса
>>1409443>у рандомной нарисованной кривой формулы нетДык у нее и производная не во всех точках может существовать => в какой-то точке может не быть нормали / быть больше одной нормали.С другой стороны, в кампухтере все равно это скорее всего будет ебошится численными методами.
>>1409463Мне вообще изначально похожий метод пришел в голову, но я покумекал насчет него, порисовал в тетрадке, и там хуйня получится скорее всего. Постарался нарисовать. В масштабе пикселей эти нормали будут хаотичными. А должно быть у них у всех направление, как на второй пикче белыми линиями.
>>1409477Ну тогда тебе как-то сглаживать нужно. Можешь попробывать строить не по соседним точкам, а например через две. Или высчитывать несколько нормалей - одну по соседним точкам, вторую по удаленным и брать среднее. Если тебе именно плавность нужна, то тут наверное в сторону какой-то скользящей средней или чего-то подобного думать надо.
>>1409512Я уже склоняюсь к тому, что нахрен эти нормали. Все равно для моей основной задачи это плохо подходит. Надо какое-то другое решение.Но за ответ спасибо.
>>1409562>два дебила тупят над школьной задачкой коллективно>так нихуя и не решили>нормально общаться. О да.
>>1409579>построить нормаль к линии на плоскости>3-4 курс университетаНе знал что есть университеты для счастливых обладателей 47 хромосом (тебя)
Сап. Класс имеет геттер, возвращает очевидно конст реф.Почему 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. Или может дебагом посмотри каким именно конструктором строится объект и оттуда разбирайся.
Посоветуйте как мне сделать правильнее\лучше.Делаю игру. У игрока есть способности (реализованы просто калбеками). Например, создать какую-то сущность на карте или удалить её с карты.Также имеются режимы игры (для каждого свой набор способностей).Внутри каждого режима есть свои состояния: подготовка, игровой процесс, конец и тд.Так вот, при переключении состояния должны, например, заспавнится определённые сущности, появится виджет на экране и тд.Пока что это сделано теми же калбеками, только их вызывает игра сам игрок к ним доступа не имеет.Но мне бы не хотелось смешивать это всё в одно.Может через какой-то паттерн или какую-то йоба приём можно это сделать?Типа, состояние переключается и посылает эвент, а обработчик на него реагирует в Вов сделано подобное, правда там не для игровой логики это сделано, а для интерфейса?
>>1409695Ты вроде уже все описал, не? Делаешь машину состояний, задаешь действия при переходе от состояния к состоянию.https://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
>>1409714> Делаешь машину состояний, задаешь действия при переходе от состояния к состоянию.Так и сделал.Там что-то вроде: actionManager.UseAction( "createMap" ); и тп.Но посчитал что вместо прямого вызова можно сделать по другому.
>>1409728Всё так у меня.Сначала меняется состояние, а затем происходят действия (если нужно).А я хочу чтобы вместо прямого вызова какой-то функции было что-то вроде посылки событий, но кроме обсервера какого-нибудь я ничего не придумал (и кроме того что есть сейчас).
С программированием знаком, но с ++ не очень. Захотел написать что-то с OpenGL, но нигде не написано как это делать from scratch. Ну или from scratch считают использование CMake/скачать готовый проект.Дайте ссылку на ресурс (сайт/книгу/статью), где можно почитать нахуя этот CMake нужон и как писать на плюсах имея только g++, vim и клавиатуру? Только не надо затирать о boilerplate. Я хочу понять как работают плюсы.Желательно чтоб не было заточено под Linux, на работе, к сожалению, винда.
>>1409756Там просто уроки OpenGL. Мне не это нужно.>нахуя этот CMake нужон и как писать на плюсах имея только g++, vim и клавиатуру?
>>1409744Ну так используй Qt с его сигналами-слотами, ну или Boost.Signal, если впадлу заморачиваться с Qt с его moc.
>>1409758Создаёшь пустой проект, включаешь нужные заголовки opengl, компонуешь с библиотеками opengl и всё.
>>1409773> двач, как настроить проект на opengl>> вот тебе инструкция> нет, хочу сам всё сделать>> ну тогда сделай то-то и то-то> иди нахуй быдло у меня ошибки вылазят
>>1409748Они оба довольно простые, но лучше Конан изучить, он пока что единственный кроссплатформенный.
>>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.og++ yoba2.cpp -c yoba2.og++ yoba1.o yoba2.o -o yobaСогласись, что писать это заебывает, а если нужно еще и библиотеку какую-нибудь, то легче застрелиться. Для облегчения всей этой ебли и нужен CMake.
>>1409830>>1409836Хуёвый ты тролль, если для тебя оскорбление - признак разрыва. Скорее всего, просто малолетний.>>1409844Спасибо. Вот я как раз о второй части хочу почитать. Что если мне нужно подключать хучу библиотек, и у меня хуча файлов? В каком порядке это всё компилировать? Хочу весь процесс компиляции понять.Я пролистал Страуструпа The C++ Programming Language по диагонали, но там, как я понял, компиляция не рассматривается?
>>1409850Вот лекции этого товарища посмотри. В первой лекции довольно подробно про твои вопросы отвечает.https://www.youtube.com/playlist?list=PLlb7e2G7aSpTFea2FYxp7mFfbZW-xavhLНу и полирни вот этим: https://habr.com/ru/post/150327/В принципе для начала достаточно. Дальше уже сам поймешь, что и куда.
>>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");должно проходить.
>>1410078https://stackoverflow.com/questions/44229676/how-to-decide-if-a-template-specialization-exist
>>1410112Чувак, ну ты серьёзно думаешь, что я первым делом на двач полез? Вариант через sizeof не работает, если базовая версия шаблона определена. Если бы былоtemplate<class T>struct A;template<>struct A<int>{}Тогда другое дело. А так хуй, тот код выдаст тру на A<double>
>>1410120> Чувак, ну ты серьёзно думаешь, что я первым делом на двач полез? Ну, обычно так и происходит.Онтоп - если метода с SO не сработала, то вообще хуй знает
>>1410123>Ну, обычно так и происходит.А, ну ладно тогда.> то вообще хуй знаетВот и я тоже хуй знает. Похоже, что никак.
>>1410078SFINAE тебе в помощь. Я бы сделал так: https://onlinegdb.com/SJrprjJCEНедостатком является то, что нужно писать в каждую специализацию typedef.
>>1410161И как его использовать здесь?>>1410193Я не могу изменять класc. Я вообще про класс ничего не знаю, кроме его названия.
>>1410221Хотя это тоже не обяхательно по идее, потом можно было бы class... Args написать или типа того, но для простоты пусть будет известно, что один параметр всего.
сап двач. нужна помощь в написании простых программ с нуля по заданиям. кто то может написать за соответствующую оплату? писать на мыло [email protected]
>>1410701Всё ок должно быть, мб ты опечатался где-то, например файл player.h, а ты инклюдишь Player.h
Как constexpr передать в функцию? Если сначала инициализировать переменную, то все работает, если пихать сразу в функцию, то хэш вычисляется в рантайме. Что за хуйня?
>>1410220Как блядь, действительно.std::is_same<double>(A::value).Ты можешь явно проверить, какого типа переменная у объекта класса, если value будет из int специализации, то is_same вернёт false. Хоть почитал бы.
>>1410768Если ты хочешь считать хэши в компайл тайме, то смотри в сторону std::array вроде как в 17 сделали так чтобы он работал в constexprt функциях
>>1410803Сам твой массив выделен с помощью new? Если нет, то к нему delete [] применять нельзя. Во вторых, ты применяешь оператор delete, предназначенный для удаления одиночных объектов, а не массивов (нужно delete []).
>>1410810> Сам твой массив выделен с помощью new?Да PlayerЗВ itsPlayers = new Player[DEFAULT_PLAYERS_COUNT];>>1410826Можешь пояснить?
>>1410833>Можешь пояснить?Если вкратце, то ты просто скопировал объект Player, выделенный с помощью new, в массив. И далее просто переписал указатель, соответственно память выделилась, но не удалилась. Вообще в современных крестах использовать "сырые" владеющие указатели - моветон. Для это есть std::unique_ptr и std::shared_ptr. Чем они различаются гугли сам.
>>1410841Принципиальная разница в том, что в первом варианте 3 объекта создаются на стеке и автоматически уничтожаются, когда выходят из области видимости, а во втором все создается в куче и утекает. Но все равно в первом варианте 1 утечка есть, но еще есть также 3 вызова move конструктора и 3 вызова copy конструктора, что бестолково с т.з. расхода ресурсов.
>>1410741Бамп вопросу. Хочу красиво все в одну строку вместить, а то у меня жопа горит с задефайненых макросом аргументов.
>>1410850>>1410847>>1410844Спасибо.Алсо, попробовал запустить программу в code blocks c gcc, но компилятор выдает ошибку.> 'Position' is not a class or namespace
>>1410833>Можешь пояснить? Правило буравчика - каждому new должен быть свой (обычно единственный) delete. Каждому вызову malloc должен быть свой вызов free.
>>1411145Буквально через 5 минут нашел решение, вот если кому интересно.http://qaru.site/questions/451412/constexpr-function-parameters-as-template-argumentsДаже лучше, чем я хотел.
Переполнение целочисленного это UB или не UB?В частности беззнаковый char везде одинаково будет реагировать на отрицательные значения ну т. е. там, где ожидался знаковый char?
Допустим, у нас есть шаблон. И в нем такое условие:enable_if_t<is_same_v<_Tag, _Exact_args_t>, int> = 0>что, конкретно, значит = 0 здесь? На SFINAE не похоже вроде.
>>1411228Немножко обосрался со скобочками, вот полный вариант:template<class _Tag, class _This2, class... _Rest2, enable_if_t<is_same_v<_Tag, _Exact_args_t>, int> = 0>
>>1411226Переполнение signed - UB, unsigned - не UB.>>1411228>>1411229>что, конкретно, значит = 0 здесьЗначение шаблонного аргумента по умолчанию.
>>1411231>Значение шаблонного аргумента по умолчанию.Да, оно, спасибо, уже разобрался.>>1411232Нет, не SFINAE.
Как сделать итератор шаблонного класса со вложенным в него контейнером? Хуйня на пикриле не компилится, если убрать темплейт и заменить все Т на конкретный тип типо инт то оно работает.
>>1411242Добавь typename перед std::vector<T>::iterator. А лучше не жрать говно и написать auto, ну или просто сделать метод шаблонным, если хочется больше читаемости.
Поясните за -> Читаю книгу. При обращении к членам объекта до этого использовалась "." точка. Теперь какого то хуя появляется ->
>>1411246>написать autoБля все время забываю, что так можно, спасибо.Кстати поясните в чем разница между for (auto& i : array) и for (auto&& i : array)? И то и то по сути ведь по ссылке берется без копирования, просто некоторые почему то пишут там двойную ссылку.
Допустим, есть функция стороннего API, которое я не могу изменять, принимающая callback:void foo(bool(*bar)(int, int)) {...}Могу ли я передать в неё non-static member функцию? Например, эту:class Hui { ... bool pisos(int a, int b) { return true; } ...}
Хочу контейнер с упорядоченностью, возможностью быстрой вставки и удаления в начало и конец и возможностью быстро узнать, есть ли какой-то элемент в этом контейнере. Такое бывает?
>>1411365Если не принципиально, куда вставляется, то std::map, std::set. Хранится уже в упорядоченном виде, вставка, удаление, поиск за логн.
>>1411367Под упорядоченностью я подразумевал сохранение порядка при добавлении.Мне нужно что-то похожее на std::deque, но с возможностью проверить в нём наличие элемента, как в std::set.
>>1411366Если четко по стандарту, то в общем случае - UB. Есть несколько случаев, когда разрешено, читай здесь: https://en.cppreference.com/w/cpp/language/extending_std
>>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>добавлять специализации существующих шаблонов классов/функцийДык я про второе и спрашивал как раз. То, что новые функции и классы в стд добавлять нельзя я в курсе.
>>1411253https://github.com/AnthonyCalandra/modern-cpp-features#rvalue-referenceshttps://github.com/AnthonyCalandra/modern-cpp-features#forwarding-references
>>1411382Минимизация зависимостей, ты можешь менять имплементацию, при этом апи не будет меняться и не нужно будет перекомпилять всё.
Учу qtЕсть такой фрагмент кодаБоже, не дай с разметкой проебаться#include <QApplication>#include <QPushButton>int main(int argc, char argv){ QApplication app (argc, argv); QPushButton button; button.setText("My text"); button.setToolTip("A tooltip"); button.show(); return app.exec();}Вроде все просто если я правильно понял. Создается объект button класса QPushButton и вызываются его методы.Потом используются указатели. Нахуя? Чем первый способ не подходит?#include <QApplication>#include <QPushButton>int main(int argc, char argv){ QApplication app (argc, argv); QWidget window; window.setFixedSize(100, 50); QPushButton *button = new QPushButton("Hello World", &window); button->setGeometry(10, 10, 80, 30); window.show(); return app.exec();}
>>1411438Ты не знаешь различие между объектом на стеке и на куче? Или не читал, как работает система parent-child в Qt?
Гайз, хочу поебать себе мозги плюсами. начинал с плюсов своё вайтивайти. Уже 3 года макакоёбствую на Go. Есть ли смысл учить плюсы и пишут ли какой- нибудь бекенд-хайлоад на плюсах ? Насколько долго затянется обучение ? Есть ли смысл написать какой- нибудь пет со стеком C++/Mongo/какая- нибудь апишка ?
>>1411598Без указателя/ссылки на класс никак ты свой non-static member function никак не вызовешь (если объект не в глобальной области видимости). Так что делай глобальной, либо static и передавай как &MyCls::MyFn, либо иди нахуй, токсик
>>1411332Нестатические функции члены всегда скрыто принимают первым аргументом указатель на объект, из которого вызвана функция (this). Передать куда-либо можно с помощью std::bind с указанием этого объекта - bind(Class::func, &Object, std::placeholders::_1...). Без указания объекта никак. Короче, почитай про bind.
Есть тут человек, которому можно задавать тупые нубовские вопросы по ++ время от времени?tme/dovaogedot
>>1411651Вот, например. Фунция возращает поломаные объекты шейдеров с пустыми source, но с правильными ID. На 146 строке шейдеры заполнены, на 147 source пропадает.Указатели и ссылки я нигде не использую, разве функция не должна возвращать новую копию созданной на 146 строке ShaderProgram со своими копиями заполненых шейдеров, и удалить старую ShaderProgram по выходу? Почему эта функция возвращает ShaderProgram с шейдерами, у которых поля source превращаются в "", но ID остаётся?
>>1411687Ну, это конечно, ты зря полез в графику без знания основ. Потоки ввода-вывода не копируются! Никакие!
>>1411705А ты не забываешь в конструкторах своих шейдеров вызывать конструктор базового шейдера типа vertexShader(string src):Shader(src){}. Если ты этого не делаешь, то часть базового класса сконструирована не будет.
>>1411687Не надо мудрить с какой-то иерархией классов.Скомпилированный шейдер vertex + fragment это просто unsigned intЕго ты можешь просто копировать.Хэдр https://pastebin.com/RiYGk1GhСрц https://pastebin.com/RNJFkMNU
>>1411747Если там будет Cat и Dog, наследующиеся от Animal, будет проще? Проблема в стирании std::string, а не в компиляции шейдеров.>>1411719Первый раз, как я понял, удаляются локальные копии параметров в конструкторе ShaderProgram. Второй раз они вызываются на 150 строке уже после создания ShaderProgram, перед выходом из getDefault(), уничтожая строки только что созданных шейдеров. Почему так происходит? Как быть?И ещё третий раз деструкторы вызываются уже после вызова getDefault() из другой функции. Это я вообще не знаю зачем.
>>1411754Собрал это, и никаких проблем не наблюдается. У тебя твои файлы с текстом не пустые? Лежат в папке рядом с проектом?
>>1411771Проверь как у меня на втором скрине. У тебя к 152 строке твоя выделенная на стеке строка уже уничтожена после выполнения return.
>>1411761Так, блять. Причину этой хуйни я нашёл. Я просто ShaderProgram* program = &ShaderProgram::getDefault() долбаёб.Как в таком случае сделать красиво, по правилам? Я хочу чтобы у меня в классе Human был мембер ShaderProgram. Инициализировать его мне нужно после конструктора Human. Значит, этот мембер не может быть на стеке, так? Нужен указатель на него. Нормально ли будет, если getDefault() будет возвращать указатель на ShaderProgram? Как это с точки зрения управления памятью?
Есть какая-нибудь книга или статья на 999+ страниц, типа такой -> https://www.horstmann.com/cpp/pitfalls.html ? Чтоб я такой хуйни больше не делал.
>>1411782>>141178>>1411782Пусть твоя функция возвращает умный указатель на объект, выделенный в куче. Почитай про умные указатели -- сильно облегчают написание безопасного от утечек памяти кода.
>>1411799Ну я просто где-то читал, что типа объект, который создал указатель, должен сам за ним следить и удалять.
>>1411802Умный указатель считается создателем указателя на кучу и освободит память в своем деструкторе, например, при выходе управления из блока кода, где он был создан. Они и были придуманы для решения проблемы частого забывания программистами добавить delete, где это нужно.
Ананасы, поясните за указатели и наследование.Вот есть, к примеру, класс https://github.com/SFML/SFML/blob/master/include/SFML/Graphics/RectangleShape.hpp (в конце файла есть небольшой пример использования)Он наследуется от класса Shape который, в свою очередь, наследуется от других.Вот я объявляю переменную RectangleShape на стеке, так как же тогда вся эта йоба магия с виртуальными функциями будет работать?
>>1411793На хабре от PVS Studio регулярно постят статьи на подобную тематику. Ну и на сайте самих PVS кой-чего есть.
>>1411820Ты конечно можешь все виджеты создавать на стеке, но зачем? Рано или поздно отстрелишь себе хвост по самое ебало.https://doc.qt.io/qt-5/objecttrees.html
>>1411822> Вот я объявляю переменную RectangleShape на стеке, так как же тогда вся эта йоба магия с виртуальными функциями будет работать?Такие вызовы разрешаются статически, никакой магии тут нет.
>>1411802Все так и есть. Поэтому специально были созданы юник/шаредптры, дабы облегчить жизнь нюфаням всем.
>>1411856Последнюю фразу не понимаю. Какой ущерб нанесен? Типо после удаления объекта по его адресу запишутся другие данные, а он пытаясь удалить себя второй раз сотрет их?
>>1411916Удаление "удаленного" - undefined behavior. Если в деструкторе указателю бы присваивался nullptr после delete, то было бы все норм, но так никто делает, т.к. лишняя операция, которая замедляет производительность, ну и все-таки код на с++ должен писать не дебил.
>>1411864То есть если я у производного класса и создам переменную этого типа напишу реализацию виртуальной функции, то вызывать будет именно она?https://wandbox.org/permlink/HBzGnHgOXIGkroBAПроверил. Так и есть.Получается пользоваться указателями на базовый класс нужно когда есть чистые виртуальные функции или этот базовый класс используется как интерфейс?
Объясните плз как работает этот аллокатор?Почему там говорится, что они могут с помощью new выделить буферы и они после выхода из scope сами уничтожатся? Как это работает?
>>1411929Не знаю, какой ты смысл вкладывал в свои слова, но если бы работаешь только с наследником - принимай его по ссылке. Если хранишь - храни указатель (может даже unique_ptr). Если собираешься работать с объектами-наследниками базового класса через его интерфейс, то делай то же самое, но с указателем/ссылкой на базовый класс.
>>1411979Вижу, конечно, только опять же, при чем тут raii, если это просто про расположение в конструкторе и деструкторе инициализации\удаления объекта. Тут непонятна магия с оператором new. Каким образом буферы int и float самоуничтожатся после выхода из локальной области видимости?
>>1411970Это же книжка про игровые движки?Там видимо переопределены аллокаторы памяти для int и float. Прога на старте хапает большой кусок из кучи и уже сама потом им манипулирует. В приведенном коде просто пример как это должно работать.
>>1405728Не, ну, я не тупой, это-то я знаю. Я просто не понимаю, в чём профит от вектора векторов пар. Инт инт - это точка назначения и вес дуги?
Кто знает, можно ли в рисование на двумерную поверхность в Qt через opengl, а не через qpainter, и как оно по сравнению с gdi
вот сейчас будет тупой вопрос. Почему ui->label->setText("Yoba ") работает в projectname.cpp, но не работает в main.cpp?
>>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 - главная функция, пиши в ней. Пишу в ней - не работает. Пишу в описании класса - работает.#include "Test.h"Test::Test(QWidget *parent) : QMainWindow(parent){ int i; ui->setupUi(this); ui->label->setText("YZYKEN"); for(i=0;i<10;i++) ui->label->setText(ui->label->text() + QString::number(i));}
>>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) то после удаления он должен сместиться?
>>1413078http://www.cplusplus.com/reference/map/map/erase/Объекты в std::map лежат в каком-то порядке, не важно в каком. При удалении положение объектов относительно друг друга не меняется.
Почему QT взлетел? Дрисня же, которая тянет за собой несколько ДЕСЯТКОВ метров зависимостей. Сама среда разработки, говорят так себе. Нарушает концепции самого С++. Почему это говно юзают?
>>1413232>Почему QT взлетел?Потому что остальное для клепания формочек на крестах еще хуже. А здесь годная система сигналов-слотов, а не ебучих колбеков, как везде. >Нарушает концепции самого С++.Какие? >Почему это говно юзают?Не хочешь - не юзай, никто не заставляет.
>>1413232Есть реализации основных протоколов под эмбедед + там говорят годный сейф рендер и красивые QML интерфейсы. Правда стоит это овердохуя.
>>1401309 (OP)Анон, а как сейчас программируют на C++?Когда я работал программистом-формошлёпом на C++, всё собирали с помощью qmake и гуя QtCreator'a.А как делать правильно? То есть, как делают в Big-N компаниях и всем таком?Пишут мейкфайлы, как в 80-х? Используют CMake? Не используют C++?
>>1413523где как. в крупных компаниях, где проекты большие, обычно пишут свой сборщик (ну или кастомизируют какую-нибудь систему автосборки под себя). Понятия "как правильно" - нет, каждый собирает как хочет. У нас вот cmake был сначала, потом на него забили и написали свой билдер, так на нём и сидим до сих пор.
>>1412229auto Pic = gcnew PictureBox(...);...litsPictureBoxes->Add(Pic);litsPictureBoxes - заранее созданный контейнер в свойствах формы
Двач, объясни какого хуя. Почему если пытаюсь захватить что-либо в лямбду, оно ругается что арг лист не такой?
>>1423009лямбда неявно разворачивается грубо говоря в структуру с перегруженным оператором () и членами, который ты захватил. Без захвата - в указатель на функцию. Поэтому лучше юзать std::function<T>
Аноны, реквестирую способы перестать орать с Майкрософта. Где среди тонн документации по HTTP Server API найти имя сраного .lib файла, чтоб линковать с ним? Да да, я в консолечке погроммирую, и знаете, нравится, вкусно так, экзотично. Так вот, какого хуя никто все еще не ответил? А, я ведь пост не отправил, лол. Ща исправл
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯДЬ!!!!!!!!Почему WinHttpSendRequest шлет лишь ебучий глагол?Вот реально, вместо сервера запустил голую слушалку на winsock-ах, и прилетает только 4 байта "POST". Это пиздос, чините мой пердак, аноны!!!