Вместо шапки:• https://github.com/sosachbot/cppthreadhat/wikiОтветы на вопросы:• https://en.cppreference.com/w/• https://www.cplusplus.com/reference/Прошлый тред:• >>1526322 (OP) (OP)
Вопрос по qt. Есть класс Mainwindow, в нем я создаю указатель на кнопку и в конструкторе класса делаю так> button1 = new QPushButton("Button", this);Но проблема в том, что кнопка не активна. Хотя если создать кнопку отдельно> QPushButton sd("df",&w);Где w экземпляр класса, всё будет работать. Почему?
Как унаследовать все конструкторы базового класса, если в производном только добавляются новые методы?
>>1553017То есть мне писать десяток конструкторов со всем списком параметров, а потом через двоеточие еще раз делать это?
>>1553082Где там наследование то? Явная инициализация базового класса с аргументами из конструктора класса-наследника
Qt меня уже доканал. Почему вот первое работает отлично, а во втором ничего не происходит?> QObject::connect(&w, SIGNAL(changepos(int, int)), w.lble, SLOT(setNum(int)));> QObject::connect(&w, SIGNAL(changepos(int, int)), w.lble, SLOT(resize(int, int)));
>>1553124Если слот к сигналу не подключился, сообщение об этом выводится куда-то во время выполнения. Смотри вкладку Output внизу в Qt Creator или запускай в консоли (в настройках проекта, Settings слева, можно выбрать галочку запуск в терминале).
>>1553308Огромный комбайн, который хуй пойми как ставить. Пока разберёшься, успеешь 10 раз написать свои строки.
>>1552778 (OP)Помогите мне разобраться пожалуйста.Я устанавливал qt 5.14.0 для андроид на ubuntu 16.04 и использовал ndk r20. Я следовал инструкциям в этой статье>https://wiki.qt.io/AndroidПосле того как я запустил ./configure вот какой мне вывел результат. Объясните пожалуйста, как обойти предупреждения насчет кросс-компиляции и насчет LLVM_INSTALL_DIR
>>1553450Есть какая-то причина, по которой ты не используешь установщик, а собираешь из исходников? В установщике можно выбрать андроид платформы. https://www.qt.io/download внизу open source.
>>1553450Точнее вот прямо он. http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run
>>1553456вроде как из-за того что в ndk 20 убрали поддержку gcc toolchain, надо компилить исходники с помощью кланга, насколько я понял из этой темы https://forum.qt.io/topic/95104/qt-creator-android-clang. Поэтому я думаю, лучше я скомпилю qt из исходников.
>>1553460Я это понял так: надо использовать clang для сборки исходников, потому что больше нельзя собрать из исходников с помощью gcc. Но зачем тебе вообще собирать из исходников? Попробуй, в общем. Я собирал проект с ndk-20 без ручной сборки qt.
>>1553473>>1553473>Я это понял так: надо использовать clang для сборки исходниковто есть в ./configure нужно прописать -platform linux-clang? И ты собирал проект на qt 5.14?
>>1553476> то есть в ./configure нужно прописать -platform linux-clang?Нет (не знаю), я к другому веду. На скрине обсуждается вопрос выбора компилятора для сборки qt, но если ставить qt через установщик, то такого вопроса даже не возникнет. А ты возможно подумал, что если gcc на clang сменился, то надо собирать из исходников. Проект последний раз пробовал собирать на qt 5.13.2, поставленный через установщик. Даже с ndk-r20b. https://github.com/th3or14/opencv-with-ffmpeg-on-qt-for-android
>>1553166Таки split же подвезут в 20 стандарте.Источник: лекции от PVS Studio, лекция про 20 стандарт.
>>1553489Насколько легко?vector<string> s = stringstream("abc def ghi").split(" ");Справится хотя бы на таком уровне? Или нужно будет писать 20 строк и инклудить какие-то странные классы?
>>1553494std::string text = "Let me split this into words"; std::istringstream iss(text);std::vector<std::string> results(std::istream_iterator<std::string>{iss}, std::istream_iterator<std::string>());
Поясните за эту хуйню. Как это работает? https://wandbox.org/permlink/bdVTZHXMQ3vf5f0eПочему раскрытие идёт корректно только внутри таких вот скобок, но не внутри std::invoke? Например, std::invoke(&f, std::forward<V>(v)..., cap) не сработает, потому что не сможет найти подходящий overload. Это потому, что не существует прототипа, который бы раскрывал variadic pack?
>>1553124Проблема оказалась в том, что move не слот как я понял, при выпадении листа методов слоты имеют значек с зазубринами а просто методы прямоугольник
>>1553526Знаешь как эта хуйня (...) работает? Она в данном случае указывает, какое именно выражение копипастится, т.е. раскрывается.Вот смотри, если написать внутри инвока оно раскроется так.(invoke(&vector::reserve, forward<V>(v)..., cap)) -> (invoke(&vector::reserve, a, b, c, cap)), попытается вызвать vector::reserve(a, b, c, cap) и справедливо заметит, что такой перегрузки нет.А если после инвока, то копипастится весь вызов и всё ок.(invoke(&vector::reserve, forward<V>(v), cap), ...) -> (invoke(&vector::reserve, a, cap), invoke(&vector::reserve, b, cap), invoke(&vector::reserve, c, cap))
Что используется для вывода сообщений у c++? На шарпе я всегда messagebox использовал, а тут не знаю даже.
>>1553774Можешь и здесь использовать MessageBox если ты упоротый. Ещё можешь посмотреть в сторону Qt.
Помогите, пожалуйста, составить программу или переделать мою, на кону стоит зачет по программированию и анальная девственность.Условие: Записать элементы массива X[N] в массив Y[N], сдвинув элементы массива Х влево на 3 позиции. При этом 3 элемента из начала массива Х перемещаются в конец. В массиве Y[N] перед первым четным элементом добавить элемент со значением -1. Использовать операторы ввода-вывода printf-scanf.#include <stdio.h>#include <cstdlib>#include <iostream>int main(int argc, char argv) { unsigned int X[100], Y[100];int i,N,i1;printf ("\n N=");scanf ("%d",&N);for(i=0;i<N;i++) {printf("X[%d]=",i); scanf("%d",&X); } printf("\n");for (i=0; i<N; i++) {if (i<N-3) Y=X[i+3]; else Y=X[i-N+3]; }i1=-1;for (i=0;i<N;i++) {printf("Y[%d]=%d\t",i,Y); if(Y%2==0) i1=i;}if(i1!=0){ printf("\n");printf("Y[%d]=%d\n",i1,Y[i1]); for(i=N;i>i1-1;i--) Y=Y[i+1]; Y[i1]=-1; N++; for(i=0;i<N;i++) printf("Y[%d]=%d\t",i,Y); printf("\n");}else {printf("\n");printf("There are not even elements \n");} return 0;}
Как сделать свой класс атомарным? У меня есть класс, которые может суммировать строки, но при этом он должен быть однозначным в многопоточности. Реализовать внутри очередь?
>>1554001ну кстати чел у тебя почти все правильно, надо только "if(i1!=0)" заменить на "if(i1!=-1)", "for(i=N;i>i1-1;i--)" на "for(i=N - 1;i>i1-1;i--)", а "Y[i_]=Y[i+1];" на "Y[i + 1]=Y[i_];"
>>1554137Что значит "атомарный класс"? Атомарными могут быть только операции. Добавь мютексы в свои методы
>>1554212ну да, операция сложения строк. С мютексами насколько я понимаю будет долгая задержка, если операция длится долго.
Ананасы, поясните за аллокатор (кастомный).Вот, к примеру, он выделяет память кусками.А как быть есть подо "что-то" не хватит выделенного куска памяти. Например, текстура.Как быть тогда? Выделять несколько чанков под неё?
>>1554222Так эта твоя операция навряд ли будет длиться долго, но суть не в этом.Покажи сигнатуру метода, потому что не совсем понятно, как класс должен строки складывать.
>>1554184Сделай своё api для гуи. С кнопками, ползунками и надписями, чтобы все элементы интерфейса взаимодействовали друг с другом через виртуальные методы или ещё как и могли в нажатия мышкой, клавиш, колёсико.
У меня есть луп выполняющий действие каждые 2 сек.У меня есть кнопка Х для выхода из лупа.Можно ли как то выйти из лупа быстрее, чем происходит одна итерация (2 сек)?
>>1554184ооп это парадигма для фабричного программирования, то есть бля берется проект в вакууме, описывается задание для старшего технаря, тот рисует облачки со стрелочками(ну вы знаете), отдает эти облачки со стрелочками младшим обезьянкам и следит за ними как они кодят.все устроено так, что на каждом отдельном этапе ничего сложного нет и в общем то нехуй там дрочить.сложность(ну я бы сказал дефект ооп) в том, что когда ты рисуешь облачки со стрелочками, ты не можешь прочувствовать каждый оператор в каждом методе, ну это просто невозможно. по этому всегда будут костыли из-за недостаточной глубины продумки проекта на ранних этапах. так же невозможно предсказать все будущие правки проекта.например тут писали про квадраты из прямоугольников. ну да это очень простой и наглядный пример. но бля задать прямоугольник можно несколькими способами https://gamedev.ru/terms/AABB .когда вы думаете о машине, вы можете регулировать в своих мыслях глубину детализации или абстракции, то есть можете думать о машине но на самом деле в мыслях вы будете видеть только кузов с колесами, через момент можете по желанию открыть капот и представить некоторые детали двигателя, еще спустя один миг вы уже представляете 2Д иконку из эмодзи с машиной. но мозг нормального человека не способен одномоментно осознать всю машину как она есть и все условия эксплуатации этой машины.ооп говорит, что машина наследуется от транспортного средства и реализует интерфейсы кресло, руль, педали и тд, что бы человек сел в нее и поехал. ну да все логично - так думают наивные новички и у них даже получается делать свои первые проекты. они думают, эй я уже надрочился и могу декомпозировать целые проекты прямо в классы, эй объекты в моих мыслях прямо как объекты в ооп - нихуя подобного. все это хуйня для даунов. некоторые настолько влюбляются в заведомо дефективное ооп, в парадигму, где одно изменение в проекте может понести за собой каскад правок по всему коду, что у них даже начинается ну ебаный бред я не знаю, это я про фанатов фабрик фабрик итд.я работал с таким идиотом, ну фанатом uml облачек и архитектуро бреда. я просто брал его классы, переписывал и они получались короче либо вообще исчезали, так как мне нужна была причина это делать, я еще сверху дописывал фичи или находил баги. даже ебаное ооп я понимал лучше него. но он отплясывал перед менеджерами и руководителями, которые в свою очередь с большой вероятностью идиоты тоже, так что учиться надо отплясывать в первую очередь, а код писать не сложно.
>>1554294>Сделай своё api для гуи.Плохой вариант. Гуй на ООП не очень хорошо ложится. Компонентный подход гораздо удобнее.
>>1554251>Возможно ли QTreeView сделать чтобы итем верхнего уровня имел 1 столбец, а его дети 2? Можно сделать, чтобы он отрисовывался на два столбца. Но надо писать свою модель. Посмотри, как у них Property Browser сделан.
>>1554331>Все GUI фреймворки построены с использованием ООПДалеко не все, ImGui, например. А те, что написаны, начинали писаться в 90-е, когда ООП было модно. Например swing на джаве - образцовый пример, когда ООП только мешает. Там заебешься какую-нибудь кастомизацию делать, хотя ООП тут вроде должно помогать.
>>1554315>напишите нормальный цикл.>ловите WM_KEYDOWN.И как это тебе поможет выйти из цикла, который с задержкой в 2 сек, быстрее ?Зачем заморачиваться дополнительно ещё и ловлей из кучи совершенно не нужных сообщений нажатие на кнопку, с которым и так нету никаких проблем ?От того, что ты будешь разгребать все сообщения, в поисках нажатия, вместо того, чтобы взять готовое - ничего не поменяется.Вот это решение >>1554308скорее всего, оптимально.
>>1553922Оказалось, что после того как я удалил присвоение указателя, действие с ним осталось. Странно что это даже не подсветилось.
>>1554334Immediate Mode Gui (включая ImGui) фреймворки сделаны специально для игр и подобных им вещей, которые работают в непрерывном цикле "обновление состояния-отрисовка" (а не по типичной для десктопных приложений событийной модели). Они очень примитивные и ничего серьезного ты на них не сделаешь.>Там заебешься какую-нибудь кастомизацию делать, хотя ООП тут вроде должно помогать. Без ООП ты еще больше заебешься при попытке написать что-то мало-мальски сложное.
>>1554348> Они очень примитивные и ничего серьезного ты на них не сделаешь.Редактор Unity3d написан на immediate mode фреймворке. Это достаточно серьезно?>Без ООП ты еще больше заебешься при попытке написать что-то мало-мальски сложноеEmacs, например, можно считать "мало-мальски сложным"? ООП там нет.Я вообще не против ООП, тем более, если оно встроено в язык. Мне не нравятся практики из 90-х, когда в том же гуи все наследуется от супержирного базового виджета, а весь функционал приколочен гвоздями и инкапсулирован так, что поменять что-то можно только через систему костылей.
>>1554349>Редактор Unity3d написан на immediate mode фреймворке. Это достаточно серьезно?Я уверен, что они поверх него навертели ООП врапперов>EmacsУ емакса считай что гуи вообще нет>Мне не нравятся практики из 90-х, когда в том же гуи все наследуется от супержирного базового виджета, а весь функционал приколочен гвоздями и инкапсулирован так, что поменять что-то можно только через систему костылей. Оно так неспроста и лучшего способа делать гуй пока не придумали
>>1554322>я просто брал его классы, переписывал и они получались короче либо вообще исчезали.В классе десять методов, а нужен только один - ну как не выкинуть девять не нужных, написав класс из одного метода ? - понимаю.Или, так и хочется выкинуть весь класс, а нужный метод оформить в виде функции, да ?Однако "оптимизацией" подобные выкидывания, переписывания и упрощения - не являются.Оптимизация должна не укорачивать код, а делать его быстрее. От того, что программа даже, пускай, не будет иметь классов вообще, она быстрее сделается лишь не намного.Недостатки :Лишний в ней, "мёртвым грузом" заведомо не используемый код - не способен помешать, ведь он, тупо, не используется, а в адресное пространство программы загружаются только хотя бы однажды вызванные из класса функции - не используемые при работе программы функции так и пролежат на диске в её файле.Да, размер файла программы они увеличивают, но это не сопоставимо с неуклонным ростом размера дисков.Преимущество :"Лишний" код в классах, включая сами лишние методы, не мешают разработке, так как они инкапсулированы в отдельный файл, а имена методов и свойств не пересекаются с именами функций и переменных кода, который пишет разработчик, так как находятся они в другом пространстве имён, начинающимся с имени класса.Вопрос в том, далеко ли спрятан код класса от пакостливых рук - например, внутренние функции и операторы языка спрятаны достаточно далеко, чтобы разработчик не начал чего ни будь "улучшать" - няхай своё пишут, а не лезут с исправлениями.Так же, контролы визуального интерфейса высокоуровневых языков надёжно спрятаны от любознательных охотников чего ни будь откромсать, переписать или выкинуть, такое желание закономерно и ожидаемо.Оптимизация :Если сравнить два варианта кода, делающих одно и то же, но один из которых использует класс, то такой код окажется, конечно, медленнее. Просто нужно делать классом что-то монументальное, редко, не в длинном цикле вызываемое, но они, собственно, для этого и делаются - одним вызовом метода совершить много работы.Конечно, если делаешь критический код, там не должно быть никаких классов, но он и не будет слишком большим.В остальном, как тут не отпинывайся от ООП, оно неизбежно : так же протестовали и против высокоуровневых языков - сейчас даже микроконтроллеры программируются на них, добрались, со всеми тяжкими, классами, скрытыми внутренними функциями языка и прочее.
>>1554344И как это применить ? - первое генерирует таймер, второе закрывает программу."Sleep(2000)" заморозила программу, может ты как-то хочешь дать ей отбой.
>>1554351>Я уверен, что они поверх него навертели ООП врапперовНе навертели.>У емакса считай что гуи вообще нетНаоборот, емакс - это одно сплошное гуи, пусть и текстовое (хотя графика там тоже есть). Еще как пример - чисто сишный блендер.>Оно так неспроста и лучшего способа делать гуй пока не придумалиДавно придумали, просто вынуждены использовать легаси родом из 90-х вроде Qt.
>>1554355>>ну как не выкинуть девять не нужныхкогда там в С++ уже завезут =delete для своих методов а не только операторов и конструкторов/деструктора?Чтобы я писал так:class Foo{ virtual void pina() {cout << "пора бухать";}};class Bar : public Foo{ void pina() = delete;};Bar bar;bar.pina(); <===== ERRROOOORRRR, НИЗЯ
>>1554381Тогда всё ООП с полиморфизмом идёт нахуй. Класс должен расширять поведение базового, а не заменять его.В теории
>>1554386не идет, так можно делать. Можно удалять делать недоступным базовый функционалИ если в гламурных С#/Java это пофиг, то уж в С++ который весь такой под оптимизации - уже давно пора сделать какой-то механизм для гарантированного удаления говна на уровне компилятора.
>>1554381>когда там в С++ уже завезут =delete для своих методов а не только операторов и конструкторов/деструктора?Retarded? Ещё в C++11 завезли. Даже для free functions можно, не только методов.https://wandbox.org/permlink/ooDbZbcgXdKwD8sD
>>1554610Охуеть плюсы продвинулись. Может, ещё и рефлексию и lisp-стайл макросы добавили давно, просто никто не заметил?
>>1554381>class Foo>{>virtual void pina() {cout << "пора бухать";}>};>>class Bar : public Foo>{>void pina() = delete;>};>>Bar bar;>bar.pina(); <===== ERRROOOORRRR, НИЗЯ И без `void pina() = delete;` будет ERRROOOORRRR, НИЗЯ
>>1554355а еще я вносил серьезные правки в проект, и типа после моих правок одни баги исчезали и вероятно появлялись другие для меня не очевидные.когда тебе приходится работать с тупым человеком, тебе приходится делать такую работу, которая обычно считается ненужной, а то и вредной. даже лично для тебя эта работа вредная, так как тебе приходиться объяснять, зачем ты переписал много кода, когда как тебе нужно было лишь добавить кнопочку.но лично ты то видишь, что если ты просто добавишь кнопку, то в трех местах съедет верстка, в четвертом месте начнет вылетать, в пятом кнопка не добавится. пока ты читал код и думал че делать, ты нашел несколько багов сверху. в таких случаях некоторые принципы разработки идут нахуй.а на счет лишнего мертвого кода - а нахуй он нужен, он же все равно будет в системе контроля версий, так что можно удалить и восстановить по желанию. я думаю так, удалять такой код можно, что бы глаза лишний раз не мозолил. но я говорил не про неиспользуемый код, а про используемый раздутый говнокод.
>>1554631Пытаюсь разобраться с реализацией очереди массивом..Сап, плюсики, подскажите пожалуйста что на пикрил происходит. Она же всегда 0 дает. Тогда зачем ? Более полная часть кода тут https://rentry.co/sourcecode/raw
>>1554661там какой-то код, который к С++ отношения не имеет. Или там пробелы пропущены в аргументах функций
>>1554671>Или там пробелы пропущены в аргументах функцийКодировка, чтобы ее, похерелись пробелы между типом возвращаемого значения и неймингом функций.>>1554670У тебя конкретный вопрос спрашивют, а не просят зделоть, в прочем ты все равно нихуя не понимаешь
>>1554661там сыроватый код но логика определенная есть. под очередь выделяется память, допустим int[100]. изначально очередь пустая, по этому начало и конец очереди 0 0. добавляется элемент в очередь, конец становится 1. берется элемент из очереди и начало становится 1, как и конец.после нескольких таких операций начало и/или конец могут выйти за границы куска памяти. код на пикриле как раз для защиты от этого.допустим начало очереди на 98 элементе массива, я добавляю элемент и конец становится 99, я добавляю еще элемент и конец выходит за пределы массива, но память уже есть выделенная и можно просто начать залазить в начало массива. финт с остатком от деления общеизвестен, к n + 1 ты дописываешь (n + 1) % data.length и ты уже не выйдешь за пределы массива.перепиши псевдокод for(i = 0, i < 100) { print(i % 10)} и посмотри что будет.
>>1554689а то, 6 лет плюсов, но нихрена не понимаю, конкретны ответ таков: ты тупой, не лезь в кресты
>>1554702>6 лет плюсовпошли авторитетные аргументыа у меня жопа толще, соси быдло.Видел я вас таких, пиздят тудя сюда языком, а по-факту сами нихуя не понимают.Алсо, я вообще мимиокрокодил.
>>1554709проходи, не задерживайся, если ты нормально код запостить не можешь, что с тебя взять? ты задаешь вопросы, но задаешь из без уважения
>>1554709я 10 лет кодю на разных языках и каждый раз трудно вчитываться в говнокод студентов, я >>1554701-антонна счет уважения сыглы, студенты должны страдать и пусть они вообще нахуй идут, я ответил только потому что мне скучно было
>>1554718>если ты нормально код запостить не можешьКакой код, поехавший. Я мимошел и увидео твои охуенно ценные ответы уровня, "идите нахуй", надменность всегда отличает находящихся под эффектом Даннинга — Крюгера. >ты задаешь вопросыПиздец, и вот это pr сегодня, не понимает даже как wakaba работает. Ебушка воробушка.
>>1554723Вот, братишка понимает, что посты отсталых снижают общий уровень интересности тредов. Когда уже кресты (си с классами) перестанут преподавать в вузах? Дожить бы!
>>1554610>>1554381раньше просто в классе-наследнике меняли модификатор доступа с public на private для метода-члена который нужно было "скрыть"
>>1554917Тебе нужен генератор случайных чисел, где семя изменяется на 1 каждый шаг. Ты его перепиливаешь так, чтобы в для примерах трёх потоках семена были 0, 1, 2, и каждый шаг семя изменялись на 3, а не на 1.Если на быстродействие более-менее плевать, ты делаешь 3 одинаковых генератора в одинаковом состоянии, второму и третьему проводишь 1 и 2 итерации. Потом при извлечении числа выполняешь итерацию 3 раза, и берёшь только последнее значение. Из плюсов - это сработает с любым генератором, даже где семя меняется непредсказуемым образом.Не уверен что все генераторы сохранят свои свойства рандомности, равномерности распределений и всё в таком роде - нужно проверять.>>1554920Угу, и это утонет, тому что он вместо 10 мс будет генерировать 10к значений в течении нескольких секунд.Лучше тогда единый циклический массив создавать, и оттуда с помощью атомарного счётчика извлекать значения. Например, буфер на 256 значений. Метод атомарно увеличивает значение, забирает число, и потом генерирует новое (в массиве помимо числа хранятся состояния генератора и номер). Можно и стек какой-нибудь неблокирующий прикрутить, но что-то я больше в циклический массив вижу.
>>1554748Ещё лайфхак: не читать посты, в которых есть буква Q. Моя жизнь действительно стала намного легче, когда я начал игнорировать qt-детей в этом итт треде.
C++ бояре уровня $300КК/ПСЕК, поясните, что говорит компилятор в ответ на вот этот код: https://wandbox.org/permlink/DBXyIaWOyQuUtlDX?
>>1555164у тебя вектор из векторов, только вместо вектора ты почему-то ищещь число.Это как бы в ящике ящиков ты бы искал содержимое ящиков
Два вопроса по теме «C++ Type Loophole» и «Stateful TMP»:1. Цитата: «В C++ неймспейс-скоуп — это такое глобальное состояние, которое можно менять (через инстанциирование шаблонных структур с функциями-друзьями), и которое можно считывать (через SFINAE, detector idiom и тому подобные трюки). Интересно, можно ли это считать ещё одним тьюринг-полным языком внутри C++?» [1]Вопрос: Поясните, где там именно это «глобальное состояние»? Как оно меняется? Как его записывать? Как его считывать? Пока непонятно. По статье с Хабра: причем вообще здесь if constexpr(false) и template<typename> void foo() против void foo()?2. Цитата: «This type loophole basically allows us to store some type into a "variable" and later read it back! It's very powerful» [2].Вопрос: Так а type_list а-ля Александреску ведь то же самое делает. Разве нет? Источники:1. https://habr.com/ru/post/472780/2. https://alexpolt.github.io/type-loophole.html
>>1555188Ещё такая цитата есть: «Defining a friend function in a template, then referencing that function later provides a means of capturing and retrieving metaprogramming state».
>>1555188> Поясните, где там именно это «глобальное состояние?Очевидно, в компиляторе.>Как оно меняется? Как его записывать? Как его считывать?Так это же сабж статьи, состояние неожиданно поменялось. Записываешь определением функции, читаешь попыткой её вызова.> По статье с Хабра: причем вообще здесь if constexpr(false) и template<typename> void foo() против void foo()?В стандарте содержимое if constexpr (false) отбрасывается только в шаблонных функциях, поэтому в обычной функции ничего не отбросилось.
>>1555188ебать там комментов насраноно я, несмотря на то что и целиком книжку александреску читал (еще в нулевых) и "шаблоны с++" вандервурда тоже читал, те, в принципе, могу понять че там делают, НО нахуя?зачем
>>1555188>>1555205Ну и не забивай себе голову, там по ссылкеhttp://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2118эту хуйню всё-равно собираются запретить
Помогите. У меня есть луп1, он ожидает нажатия одной из двух клавиш (Х, SPACE) и выполняет действия, которые в конечном итоге ведут в луп2Луп2 выполняется бесконечно до тех пор, пока не будет нажат Z, после чего будет осуществлен переход обратно в луп1.Проблема в том, что если кнопка выхода из луп2 будет нажата еще до входа в сам луп - после входа луп2 выполнится один раз и тут же выйдет в луп1. Как сделать так, что бы кнопка засчитывалась только тогда, когда выполняется участок кода который ее ждет? А то получается так, что я могу в самом начале прожать выход из лупа еще до того, как программа в него войдет.
>>1555220Это побочный эффект этой функции. Тоже сталкивался с ним во время дельфиёбства. Я тогда каждый раз считывал все 255 клавиш, и уже потом проверял значение на равенство 0, залезть в описание мозгов не хватило.Если с момента прошлого вызова клавиша была нажата, то функция выдаст не ноль, и уже только на второе считывание выдаст 0. Она же какие-то номера выдаёт - попробуй посмотри что эти номера означают, там должна быть эта информация.Собственно, вот описание с первой же ссылке: "Если функция завершается успешно, возвращаемое значение устанавливает, была ли клавиша нажата начиная с последнего вызова функции GetAsyncKeyState, и является ли клавиша в настоящий момент отпущенной или нажатой. Если старший значащий бит установлен, клавиша находится в нажатом состоянии, а если самый младший значащий бит установлен, клавиша была нажата после предыдущего вызова GetAsyncKeyState. Однако, вам не следует полагаются на это последний характер изменения; для получения дополнительной информации, см. раздел Замечания."А вообще используй хуки лучше. Зачем гонять цикл непонятный, если можно каллбек засунуть.
>>1555205> содержимое if constexpr (false) отбрасывается только в шаблонных функцияхВ Шланге и ГЦЦ сейчас баг.Сейчас, если get пределён как get(type<tag>), то они НЕ отбрасывают (НЕкорректное поведение).Пример: https://wandbox.org/permlink/oLLKYqbl4QFxIddOЕсли заменить определение get:- было: get(T)- стало: get(type<tag>)то:- Шланг: отбрасывает (корректное поведение)- ГЦЦ: НЕ отбрасывает (НЕкорректное поведение)Пример: https://wandbox.org/permlink/DysX56FrbZ899H6FМСВЦ отбрасывает (корректное поведение) и при get(T), и при get(type<tag>).
>>1555207>НО нахуя?Тоже не понимаю. Если уж оч. нужно работать в компайл-тайме (вычисления/рефлексия), то «вбилдили» бы в С++ норм. язык для компайл-тайма (например, CCL -- С++ Compile-Time Language), кот. исп. привычный синтаксис С++, и код на кот. помещается внутри конструкции __ccl { code }. А сейчас порнография а-ля «в 2 часа ночи случайно нашёл новый сайд эффект в шаблонном С++ коде, сразу же пролил (от радости и от ужаса) чай и уже утром (пока соображал) вместо того, чтобы тихо зарепортить на http://www.open-std.org/jtc1/sc22/wg21, написал сокрушительный пост в бложек «The New Great С++ Type Loophole», выступил на конференции -- код растащили в продакшн (несмотря на "Верещагин, уходи с баркаса!!!")».
>>1555235ну лично я поклонник умеренного использования фич языка, без фанатизмавот, к примеру, в chrono ты можешь время записать в удобной для тебя форме, а оно при компиляции уже посчитается в удобную для машины форму, окей, это удобновроде как и компай-тайм, но, такой, лайтовый
>>1555235ну а вообще вот то что ты сказал, комитет именно это и делает в новых стандартахраньше для вычислений компайл-тайм приходилось использовать некий набор трюков связанных с шаблонами (лень перечислять, кто незнает, может тупо открыть древнюю книжку александреску и почитать)а щас у тебя все то же самое можно делать итеративненько (и до неприятного понятно, ибо магия пропадает) в constexpr функциях
>>1555249Да, отбрасывание происходит в foo. get тут притом, что по факту в разных компиляторах отбрасывание (в foo) происходит / не происходит в зав-ти от определения ф-ции get:- если тип её аргумента НЕ явл. аргументом шаблона класса, то компиляторы ведут себя одним образом (в основном НЕверным), - если тип её аргумента явл. аргументом шаблона класса, то другим (в основном верным).
>>1555188Вот, наверное, ставший уже классическим, тривиальный пример stateful template metaprogramming для 2-х состояний (false / true) [1].Операции с состояниями:- Запись состояния: 1-й вызов int f () => 1-й вызов оператора noexcept (flag (0)) => так как на данный момент friend-ф-ция int flag (int) еще не определена, то noexcept (flag (0)) вернет false => 1-й вызов int f () вернет false.- Изменение состояния: 1-й вызов ф-ции int f () => инстанцирование шаблонной структуры struct writer => определение friend-ф-ции int flag (int).- Чтение состояния: 2-й вызов int f () => 2-й вызов оператора noexcept (flag (0)) => так как на данный момент friend-ф-ция int flag (int) уже определена, то noexcept (flag (0)) вернет true => 2-й вызов int f () вернет true.В русскояз. пространстве есть два названия такого приёма:1. (офиц.) «программирование на шаблонах с сохранением состояния»2. (народн.) «протаскивание» состояния через повторные вызовы constexpr-функций» [2].Основной принцип таких приёмов заключается в том, что инстанцирование шаблонных структур/классов в разных частях кода ведёт к определениям friend-ф-ций (доступных через ADL в глоб. простр. имен), что приводит к изменению состояния, читаемого в данном примере через вызов оператора noexcept (flag (0)).В заключение стоит отметить, что С++ в его нынешнем виде -- это ветеран, который весь «латаный-перелатаный», весь «чиненый-перечиненый», весь «заплата на заплате», который медленно (но уверенно), через годы, через труд, пот, боль и кровь приближал (как мог) победу в ожесточённой битве за (среди прочих) производительность и zero-cost abstractions, при этом неся на себе тяжелый груз обратной совместимости с пред. С++ стандартами. Ссылки: 1. http://b.atch.se/posts/non-constant-constant-expressions2. https://2ch.hk/pr/arch/2018-08-16/res/1196791.html#1196926
>>1555673Это не лаба, я вообще пытаюсь учить плюсы только пять дней по вечерам после работы. >>1555687>скажи кто тебя гото научилВот тут пример посмотрел. Единственная отговорка почему его "нельзя" использовать заключалась в том, что это якобы усложняет чтение программы и можно запутаться в порядке выполнения кода. Хотя, мне показалось, что это наоборот облегчает переход из одного участка кода в другой, так как не нужно создавать 99999 булианов и проверять их значения. И как выпрыгивать из многоуровневых циклов без готу я вообще не представляю.https://ravesli.com/urok-66-operator-goto/
>>1555753>почему его "нельзя" использоватьНа практике goto используют только новички, или деды с седыми яйцами. Если у деда ещё не начался маразм, то ему можно, потому что он наверняка знает что делает и в конкретном случае этот goto имеет смысл.
>>1555753Goto затрудняет понимание кода, рекомендуют избегать это. Из цикла всегда один выход, можно еще через break дополнительно делать, если требуется.Кстати почему такой бугурт с ЛАБ? Вы думаете дохуя в универах объясняют и типа если возникают трудности/вопросы, то человек не учится?
>>1555768Лично я ещё с начальным уровнем знаний научился гуглить и думать, а не ныть, что "это мы не проходили". А по постам большинства тех, кто идёт сюда с лабами, сразу видно, что думать они не хотят.
>>1555753без гото инструкции выполняются последовательно и даже циклы и операторы ветвления работают в определенных рамках. в этом вся суть, глаза знают куда прыгать при чтении кода. гото же позволяет делать неведомую хуйнюдавай чуть попозже мне станет скучно и я тебе распишу че ты хочешь там с кнопками сделать, если успею
Ваши все высеры про goto похожи на результат того эксперимента над обезьянами, где их водой обливали. Никто из школьников-хейтеров goto итт его никогда не использовал и не встречал где-то кроме статей "топ 10 ебанутых фич c++", но считает важным упомянуть, что это плохо
>>1555767>На практике goto используют только новичкиЯ новичок и просто не могу представить как можно делать эту логику перепрыгивания в нужные мне участки кода по другому, у меня не хватает знаний. Узнал об операторе, нашел пример его использования, он мне показался подходящим. >>1555777Это не лаба, я закончил университет год назад (могу пруфануть). Хотя лучше бы это была лаба, в таком случае у меня был бы преподаватель объясняющий хоть что-то. Но я совсем один, у меня нет ни знакомых ни друзей программистов. Все что я могу - это гуглить и собирать информацию по крупицам. Вот я насобирал и написал этот говнокод, я же не знал, что так нельзя. Теперь знаю. Спасибо.
>>1555687>скажи кто тебя гото научил, я его пиздануМакконел описывал одну ситуацию кстати, когда гото может облегчать код.
>>1555768>Кстати почему такой бугурт с ЛАБ?Я самоучка, и потратив смешное время ещё в школе на кодинг своего платформера на gdi+ просто по фану без какой-либо цели, все эти лабы стали очень простыми. Если человек спрашивает что-то уровня лаб, то это выглядит так, как будто он просто не удосужился 30 минут посидеть и разобраться. Потому и некоторое презрение иногда проскакивает - как будто человеку этот код не интересен, а он хочет сделать конкретное задание и забить. Даже если я сознательно понимаю что это не так, отделаться от общего негативного впечатления не всегда получается.Те ребята которые гонят на гото мне тоже не нравятся. Концепция очень хорошая и отражает то что действительно происходит на процессоре. Если поймёшь гото - то поймёшь всё остальную логику с условными переходами в любых рекурсиях и циклах.Использовать его не стоит в чём-то сложнее кода в один файл или выхода из двойного цикла (где goto полностью эквивалентро return-у в функциях, который никого особенно не смущает почему-то), но разобраться он как работает и какие побочные эффекты вызывает - очень хорошая идея.
>>1555831Это си, гений. И там это используется а-ля try\finally очистка ресурсов.И вообще, goto очень серьезно ломает всю систему жизни обьектов в С++, там ехал UB через UB, если не знать точно, что ты делаешь, что не является случаем студентиков.Короче - goto нахуй и впизду.
>>1555849И что что Си? На крестах без ООП ты как будешь ресурсы очищать? try\finally платформозависимый код и не везде может применяться, да и вообще эта конструкция еще опаснее и сложнее, чем goto. Goto позволяет улучшить качество кода и сократить его.
Привет, двачеры.Подскажите какие-то книги или другие ресурсы по изучению плюсов.Я не нуб, знаю JS на высоком уровне и основы плюсов (йобаное ООП, перегрузку функций, указатели и т.д.).Хотелось бы освоить тонкости самого языка, все эти инлайновые операторы, библиотеку Windows.h, её аналог под nix'ы, tcp/http на плюсах.Пробовал msdn, но это пиздец, по сравнению с mdn - кусок дерьма, но если ничего другого не найду, придеться сидеть на нём =(
>>1555861>>1555899Т.е. ты просто сравниваешь variable == true (true == true), что на выходе выдаст тебе true, а можно писать просто variable, которая на выходе тоже даст true.
>>1555898По самому язык бери любую книгу из шапки.По "Windows.h" копай в сторону WinAPI. На эту тему есть отдельная литература. Однозначного аналога для Unix нет, он не такой монолитный, как винда. Тут и POSIX API, и вещи, типа dbus/xcb/etc. В общем, много всего.Хипстерский сайтик, где всё это было бы в удобном формате в одном месте, ты вряд ли найдёшь. Придётся копать кучу литературы.
>>1555906А нахуя мне это делать, ебаклак? Мы в С++ треде. Может мне еще гитару без струн сделать? Телевизор без экрана? Что еще придумаешь охуенного?
>>1555916Все топовые крестовики мира пишут про RAII, но сегодня мы узнали от эксперта с двача, который знает, про что С++, что все эти эксперты ошибались. Что же делать. Как быть.Хотя если у тебя есть желание продолжить меня смешить - можешь рассказать нам, про что С++ по твоему авторитетному мнению.
>>1555898>библиотеку Windows.hОсвой создание простых (без кастомных контролов и GDI) GUI на чистом WinAPI. Освой многопоточность через processthreadsapi.h. Освой получение данных о железе через WMI.>tcpWinsocks>httpWinHTTP. Есть ещё WinINet, но я не юзал его.
>>1555927Это >>1554331 случаем не твой пост? Я вижу ты любишь жрать говно. Иди вики хоть открой и посмотри, что такое мультипарадигменный язык программирования и какие парадигмы доступны С++. Топовые крестовики похоронили ООП еще в 2015-2017.
>>1555927так то raii щас нужен когда нужно управлять другими ресурсами, а не памятьюдля памяти есть умные указатели (и в стандарте тоже), которые и реализуют из коробки идеому raiiтакже семантика перемещения вообще позволяет реализовать интересный подход, когда отказываются от выделения чего-то на куче, а делают все на стеке
>>1555936Спасибо за то, что решил таки продолжить меня смешить, тебе это удается. На всякий случай - ООП это парадигма, а не использование слова class в нужных местах.И да, ты прав в том, что язык действительно мультипарадигменный, и за счет этого он позволяет в нужных местах использовать наиболее подходящие инструменты, а не тупо забивать гвозди ломом, при этом вопя что ООП ПРОШЛЫЙ ВЕК ДЖАВА ГАВНО НАСЛЕДОВАНИЕ АХАХА ДЕДУЛЬ
>>1555941В линуксе вместо винсока дефолтные BSD сокета. Собстно, винсок - это калька с них. Вместо WinHTTP там дефолтный libcurl, кстати, настоятельно и под виндой рекомендую его использовать. А еще лучше - обертки, типа curlpp были, которые сишный ад превращают в читаемое C++ API.
>>1555942Смешишь тут только ты, обосравшись несколько раз в терминологии и наглядно показав свою некомпетентность.
>>1555947Где вас, таких конченых идиотов берут, и что вы забыли в С++ треде? Вот вопрос, который меня очень интересует. С GOTO, с тем, что RAII это ООП, а ООП уже никто не использует, и с прочим кретинизмом человека, который не написал ни одной строки в прод, но почему-то считает, что знает С++.
>>1555952Мань, я вижу ты любишь высасывать аргументы из своего ануса и придумывать на ходу. Чем тебе Goto не угодил? Ты на сях судя по всему и хеллоу ворлда не писал и что-то кукарекаешь за прод еще. > что RAII это ООПГде я это писал? Еще какую-то хуйню в предыдущем посте про классы придумал. Совсем сказать нечего по делу.
>>1555936>Топовые крестовики похоронили ООП еще в 2015-2017.что это за чушь?с++ остается ооп языкоммы все также пишем классы, определяем члены-функции в них, задаем кострукторы-деструкторы, задаем операторы преобразования и конструкторы преобразования (те мы конструируем пользовательские типы данных, определяем операции, доступные над этими типами данных и операции регулирующие жизненный цикл переменной этого типа данных, так же мы задаем и отношения между типами данных)все так же мы используем наследование между классами, проектируем гомоморфные иерархии классов (те мы задаем отношения между типами данных), другое дело что сейчас есть альтернативный подход через шаблоны - а именно классы считаются объединенными в семейство классов если удовлетворяют параметру шаблона (плюс в языке есть уже развитая экосистема для этого - а именно type traits и другие средства, в с++20 будут концепты)мы все также используем полиморфизм (базовую концепцию опп, вообще то), другое дело что там где возможно, динамический полиморфизм посредством виртуальных функций заменяется на статический полиморфизм, реализуемый через шаблоны, либо на ad-hoc полиморфизм перегруженных функцийможно говорить, что ооп в с++ изменяется, но он ооп остается ключевой идеологией языка
>>1555952> Resource acquisition is initialization (RAII)[1] is a programming idiom[2] used in several object-oriented languages to describe a particular language behavior. In RAII, holding a resource is a class invariant, and is tied to object lifetime: resource allocation (or acquisition) is done during object creation (specifically initialization), by the constructor, while resource deallocation (release) is done during object destruction (specifically finalization), by the destructor. In other words, resource acquisition must succeed for initialization to succeed.
>>1555965>Мань, я вижу ты любишь высасывать аргументы из своего ануса и придумывать на ходу. Чем тебе Goto не угодил? Ты на сях судя по всему и хеллоу ворлда не писал и что-то кукарекаешь за прод еще.Ох, эти проекции сбрендившего студентика.>>1555916 - вот тут ты эту хуйню высрал. Но продолжай маневрировать.
>>1555973Свой гуй можно поверх хоть голого опенгл сделать, Но это не делает опенгл библиотекой для гуя.
>>1555972Тогда qt или GTK+ (gtkmm). Под винду WinAPI, но он может быть сложноват, да и в Linux работать только через WINE будет.
>>1555986забавно то, что когда ты пишешь гуй на qt внезапно обнаруживаешь что ты пишешь гуй на js, лолточно так же и гуй на gtk удобней писать на vala..
>>1555972MFC, без шутокКоряво, но работает, не требует сторонних библиотек и твой проект прекрасно соберется даже через 20 лет.
go-to кстати, быстрее switch процентов на 10-15%..одна из забавных оптимизаций, работающих и в настоящее время.. из-за лучшего предсказания переходов..положим, если в каком нибудь интерпретаторе можно переписать основной луп со свитчей на goto то можно получить нихуевый буст к скорости..
>>1555990В студию пример с goto, который работает на 10-15% аналогичного свитча, и методику тестирования, по которой это было замерено.
>>1555968Объектно-ориентированных подходов много, конкретно тот самый ООП мертв.>>1555975Что-то я не вижу там этого. И да, вон выше вырезка из вики для тебя. В ООП владение ресурсом реализуются через RAII идиому. С чем ты не согласен то? И так давай подведем итоги:1. Ты не умеешь пользоваться оператором goto, как следствие яро утверждаешь что он не нужен, что говорит о низком скиле2. Обосрался в терминологии RAII, не до конца осознаешь что такое объектно-ориентированный подход в программировании, как он может быть реализован 3. Додумываешь какую-то хуйню у себя в голове из-за низкого уровня знаний и некомпетентности, каши в голове и выдаешь это за мои слова или свою истину. 4. Список маневров:> Ох, эти проекции сбрендившего студентика.> Но продолжай маневрировать. О да это же самый базовый метод маняврирования - уличить оппонента в маняврировании> Где вас, таких конченых идиотов берут, и что вы забыли в С++ треде?> Спасибо за то, что решил таки продолжить меня смешить, тебе это удается.> Все топовые крестовики мира пишут про RAII, но сегодня мы узнали от эксперта с двача, который знает, про что С++, что все эти эксперты ошибались. Что же делать. Как быть.Хотя если у тебя есть желание продолжить меня смешить - можешь рассказать нам, про что С++ по твоему авторитетному мнению.В принципе все твои посты это флуд и маневры, по делу нуль полный.
>>1556001> 1. Ты не умеешь пользоваться оператором goto, как следствие яро утверждаешь что он не нужен, что говорит о низком скилТут я закончил читать, сорри.
>>1556017Сказал долбоеб с полными штанами говна, который отправил за упоминание RAII в С# тред, потому-что ООП мертво.
>>1556020У тебя проблемы с мышлением, логикой, да и с бошкой скорее всего в целом. Подлечись что ли, таких в люди страшно выпускать.
>>1556042Опять проецируешь, да сколько можно же.Насрал в штаны - признай это. Нет, опять какую-то хуйню несет. ООП у него в C#, навыки пользования оператором goto у него показатель скилла, и прочая хуйня.
>>1556044> ООП у него в C#Скажешь нет? Штирлиц никогда не был так близко к провалу. Спасибо за эти кривляния, забавно выглядит.
>>1556074Я ничего тебе больше не буду говорить, тут понятно, что между нашими скиллами разницы миры, и ты даже понять не можешь, что я тебе пишу.Когда устроишься на первую работу - попробуй нахуярить GOTO в проде, расскажи всем, что классы устарели, ведь это ООП, и доставь кулстори о результатах.
не знаю что вы тут спорите, ведь все очевидно:- гото действительно можно использовать для лаконичности кода долбоебы в общем то и без гото нахуярят говна- ооп это блять простой подход для распределенной работы над проектом нескольких человек, я же расписывал недавно- студенты хуесосы и идут нахуй. раньше я на них тоже бугуртил "иди погугли даун первая ссылка", а за это модераторы хуесосили на форумах. потом я понял, что если все таки решать их глупые задачи, то они так и останутся долбоебами, а это хорошо. зачем продолжать плодить вкатывальщиков?
>>1556122а оно провалилось?Я не в теме вообще, на QT не пишу, но мне казалось, что кутишники очень много сил и ресурсов вложили в QML
>>1556132Со студией все отлично, с проектом, который никто не обновлял с 2010 все очень плохо обычно.
>>1556124>очень много сил и ресурсов вложили в QMLПровели большую работу, изобретя колесо. Квадратное.
>>1555849>И вообще, goto очень серьезно ломает всю систему жизни обьектов в С++, там ехал UB через UBТы с setjmp/longjmp не путаешь?
>>1556110ООП это грамотная организация кода, которая позволит тебе в будущем и настоящем его улучшать, либо использовать в других программах. Не следовать его принципам можно только если ты любишь поковырятся в собственном дерьме/не планируешь использовать исходный код, в том числе изменять его/любишь изобретать велосипеды.
>>1552778 (OP)Сап, хочу несколько тупых вопросов задать.1. Что мне мешает на любую околоматематическую функцию вешать constexpr, вдруг где-то внутри сконстантится?2. Что мне мешает на любую работу с фиксированными векторами, типа элементы вектора A возвести в квадрат и передать в B вешать (если работаем в цикле) #omp parallel for и радоваться ez параллелльности?3. Если для случая выше применить std::transform, может ли оно когда-то где-то само соптимизироваться в параллельность?
>>1556229>1. Что мне мешает на любую околоматематическую функцию вешать constexprТо, что околоматематические функции лезут в глобальное состояние.
>>1556239А как было раньше? Я пока не хочу включать c++17, так как очень опасаюсь ситуации, что проект придется пересобрать на редком компиляторе под специфическое железо.Или раньше деды прям ассемблер вставки делали?>>1556236что это такое
имхо, мне не нравится когда дают определение ооп как методологии программированияподход, когда к ооп относятся как к одному из вариантов реализации пользовательских типов данных и задания отношений между ними, мне ближе, тк позволяют дать более формальное (близкое к математическому) определениев с++ класс - это пользовательский тип; доступные операции над типом задаются через определение членов-функций; переменная типа - это объект; способ создания объекта задается парой конструктор-деструктор; отношения между типами задается посредством наследования классов, посредством членов-функций преобразования и конструктора преобразования; динамический полиморфизм взаимосвязанных типов реализауется через механизм виртуальных функций; и далее по списку..в других языках существуют другие способы реализовывать пользовательские типы, вообще работать с типамино в с++ все же основной подход остается через ооп
>>1552778 (OP)помогите мне пожалуйста. Я пытаюсь собрать проект на qt 5.13.0 с использованием grpc под андроид с abi armeabi-v7a , ndk r18b. На десктопе все работает. Но когда я пытаюсь собрать проект под андроид, проект компилится но во время линковки у меня выводится ошибка, что-то вроде>grpc++: incompatible target то есть мои либы grpc для архитектуры мобильника не подходят как я погуглил. Я пытался компилить grpc с помощью ndk вот по этому скрипту https://github.com/grpc/grpc/issues/19794#issuecomment-516588669 но когда я проверил скомпиленные таким образом статические либы с помощью команд ar и потом file, то оказалось что они скомпилены под архитектуру x86_64 а не под arm.Но я еще я нашел скрипт для protobuf под андроид и по этому скрипту https://developers.google.com/cardboard/develop/c/protobuf когда я скомпилил либу и посмотрел для какой архитектуры она сделана, то было написано что для арм. Может кто-нибудь собирал проект на qt с grpc под андроид и собирал grpc с ndk? Подскажите пожалуйста скрипт.
При сжатии текста Хаффманом на выходе получается определённое число бит, которое нужно дополнить до целого числа байт, ведь побитно писать нельзя. И вот надо что-то дописать, а как при декодировании это пропустить?
>>1556178грамотно организовать код можно и без ооп. повторно использовать код можно и без ооп. ковыряться в дерьме и клепать велосипеды можно и с ооп.давай подробно разберем повторное использование кода, для примера. как ооп помогает в этом? то есть ты предлагаешь просто взять и скопировать нужные классы в другой проект? допустим даже код без багов, а если в другом проекте не будут нужны все поля из первого проекта, или некоторых будет нехватать? а в третьем тебе одна функция нужна, ты серьезно это пишешь дебил бля ебаный? пошел нахуй школьник
>>1556242> Или раньше деды прям ассемблер вставки делали?Только если совсем упоротые. Для людей есть интринсики.
>>1556900> то оказалось что они скомпилены под архитектуру x86_64 а не под arm.Я вижу, что там проверяется ANDROID_TARGET_ARCH в скрипте и согласно ему qt подключает нужную сборку. Во-первых, посмотри, есть ли $$PWD/android/lib/libgrpc++.a вообще после запуска скрипта. Во-вторых, qt под какую архитектуру собирает у тебя? В qt creator в открытом проекте в левом нижнем углу кнопка типа build, там должна отображаться архитектура.
>>1556999сука гото сектант ебаный, говори адрес я тебе очко раздеру>>1555220чел чел чел я тебе обещал расписать что там. в общем я понял что ты хочешь, и это все хуйня что ты написал.решается это все одним флагом. если флаг true, то ты проверяешь кнопку z, если флаг false, то ты проверяешь кнопки z и space. все в одном цикле. все очень просто.вот псевдокодbool flag = false;while(1) { if (!flag && (getkeystate(x) || getkeystate(space))) { flag = true; // ... действите которое ты хочешь совершить при нажатии на x или space } if (flag && getkeystate(z)) { flag = false; // ... действите которое ты хочешь совершить при нажатии на z } sleep(10); }
>>1556933Нельзя записать 43 бита. Можно 5 байт, можно 6, но 5.375 байта нельзя, и поэтому приходится округлять
>>1557038Так действия на 'Х' и действие на Space разные, но оба действия в конечном итоге ведут в один и тот же луп, выход из которого по кнопке Z. А ты объединил их в одно.
>>1557023>Я вижу, что там проверяется ANDROID_TARGET_ARCH в скрипте я не понимаю, в каком скрипте?>Во-первых, посмотри, есть ли $$PWD/android/lib/libgrpc++.a вообще после запуска скриптя вручную скопировал все либы из grpc/cmake/build в android/lib/ моего проекта, но когда я проверял, скомпилены ли они под armeabi-v7a командой file x libgrpc++.a и потом file *.o, то все файлики то вывод был что все скомпилено под архитектуру ubuntu x_64, то есть как мне кажется, я как-то не так компилю grpc, поскольку когда я попробовал использовать скрипт https://developers.google.com/cardboard/develop/c/protobuf для протобафа и потом проверил скомпиленную либу ar и file, то показало что скомпилено под arm.> Во-вторых, qt под какую архитектуру собирает у тебяпод armeabi-v7a. Мой проект без grpc нормально собирается под андроид
>>1557057у тебя проблемы с этим?bool flag = false;while(1) {auto xstate = getkeystate(x);auto spacestate = getkeystate(space);if (!flag && (xstate || spacestate )) {flag = true;if (xstate) { // действие на x} else if (spacestate) { действие на space}}if (flag && getkeystate(z)) {flag = false;// ... действите которое ты хочешь совершить при нажатии на z}sleep(10);}
>>1557080> я не понимаю, в каком скрипте?В этом. https://github.com/grpc/grpc/issues/19794#issuecomment-516588669 тот коммент, ссылку на который далТам сборка под каждую архитектуру в свою подпапку, потом инструкции для qmake, для .pro файла, видимо.
>>1557080> cmake --build .Или в том и проблема, что не в подпапку, а в текущую папку перезаписывает каждый раз для каждой архитектуры, а последняя архитектура там как раз x86_64.
>>1557104поскольку мне надо проект собрать под armeabi-v7a, то я юзаю только первые 4 команды cmake, но после первых 2 команд создается 9 либ, которые я копирую в свой проект, но когда я их проверяю командами ar и file, они все равно для x86_64. И после еще 2 команд создаются все библиотеки, grpc++_unsecure и прочие и тоже для x86_64.
>>1557038Чего? Это не я писал. Не забывай, что ты на борде. А тот студентик да, пусть нахуй идет. С его слов си дайз не ООП язык. Мне даже интересно, что этот обезумевший первокур в треде забыл, лабу бы пилил шел.
Я слышал, что есть возможность складывать две функции, но на первых двух страничках поиска в гугле, да и в справочниках такой инфы не нашел. Так это возможно? Если да, то как?
>>1557189В каком смысле складывать? Что это означает и какой результат должно выдавать?Если это математические функции, ты можешь написать новую являющуюся суммой двух предыдущих, если у них типы и всё остальное такое же.А если у тебя одна функция копирует массив байт, а вторая сортирует записи в файле, то суммой этих функций будет являться что?
>>1557223Я точно не уверен, но результатом будет, что-то вроде функция В = функция А + функция Б. И когда я вызываю функцию В, то первой будет вызвана функция А, а потом функция Б. Обе функции принимают параметры, которые передаются функции В
>>1557251Короче.Если тебе надо F(u) = f(x) + g(y), где u = x + y, то ничего путного ты не нагуглишь, так как это интуитивно понятная вещь, сложение результатов функции. Как если ты результат вызова каждой сохранишь в переменную и потом сложишь.А если тебе надо F(x) = f(g(x)) или, что вернее, F(x) = f(x) g(x) - то это композиция и просто результат функции g передается в функцию f. Что тоже интуитивно понимается и можно так же через дополнительную переменную сделать.
>>1557189агав стандартной библиотеке есть набор стандартных функциональных объектов, адапторов, привязок, при помощи которых ты можешь комбинировать функторы, свободные функции, функции-члены классов, лямбда-функции между собой, порождая новые функторы, ну а дальше передавая их в стандартные алгоритмы, например
>>1557260Мне нужно немного другое. F(u) = f1(u) + f2(u). И для этого мне нужно гуглить то, что порекомендовал вот это анон >>1557262 ?
>>1557265Можно, если ты хочешь обращаться функциональщиной.А можно сделать функцию F, которая внутри себя складывает результат вызова f1 и f2.И передавать в нее x и указатели на эти две функции. Либо std::function вместо указателей, если плюсовым способом, а не сишным.Или захардкодить вызов этих функций внутри F.
Идея может странная, но я могу к оператору вывода в поток добавить функцию? Например я пишу функцию test и комбинирую её с выводом в поток. В итоге получаю измененный поток вывода, который сначала выводит в поток строку, а затем вызывает функцию test
>>1557251Надумал проблему. Просто берешь и вызываешь по-очереди А и Б внутри В. Можешь заинлайнить их если очень хочется.
Захожу раз в 2-3 дня. Слабо как-то пока, неинтересно. Хоть бы the darkest corners языка пообсуждали бы или там приёмы интересные из опыта. Или статьи по С++ с arxiv. А так, лабы-хуябы, goto, ооп. Сколько можно-то? Скучно же.
>>1557286это нужно, к примеру, чтобы сконструировать функциональный объект из существующих по месту и сразу же передать в использование (в стандартный алгоритм, в частности)щас правда удобней стало лямбдами пользоватьсявообще смысл в том что ты создаешь новый функтор посредством комбинирования других функторов, а не его определением посредством написания кода вручную
>>1557277тебя тут развлекать что ли должны? тред на дваче блять не соответствует его ожиданиям пхахвахахах.. еб твою мать какой же ты тупой дебил>>1557281я же ему отвечал >>1554162 >>1554185
>>1557369Если меня не обманули в инета, то все пользовательские манипуляторы работают только когда их вызвали, а вот мне нужно подобие работы манипулятора hex. Один раз вызвал и потом все целые числа отображаются в шестнадцатеричном виде. Только в моём случае вызов манипулятора запускает подсчет выводов в поток
>>1555797>Никто из школьников-хейтеров goto итт его никогда не использовалИспользовал в дипломной работе для выхода из вложенного цикла. Брат жив, зависимость есть.Где-то у Страуструпа есть телега, где он пишет, что в этом случае goto самый простой, а потому самый лучший способ.В качестве альтернативы некоторые предлагают использовать исключения. Уёбки.
Как правильно освобождать память в динамической матрице (динамический массив указателей на динамические массивы чисел)? Делал это как на пикрил — программа через раз крашится. Не смог выявить, в каких именно случаях, но это прекратилось, когда я убрал этот кусок кода. Не понимаю, что не так, мне казалось, что все логично. Памагити!
>>1557675Быстрофикс: вылеты происходят, когда я пытаюсь выделить память на новую матрицу (адрес сохраняю в тот же указатель), и только в том случае, когда новая матрица больше по размеру.
>>1557685На пикриле эквивалентный код. Может я неясно выразился, но я спрашиваю, правильно ли освобождать память так.
>>1557692какой хороший студентиквозможно ты еще и устроишься дальше по жизни в темлом офисе, а не здохнешь под забором
>>1557741>>1557749Вкратце: я рукожоп. У меня было написано что-то вродеobj.size.x = m;obj.size.y = n;obj.resize({m, n});то есть, первые две строки были лишними. А вообще, глупо было оставлять size доступным для изменения значения извне, вдвойне проебался.
Какими операторами лучше реализовать программу по типу ребиндера. Что бы менять кнопки клавиатуры местами, и всякий доп функционал, например одна и та же кнопка F становилась цифрой то нампад1, то нампад2, то нампад3, в зависимости от кол-ва нажатий? В какую сторону копать?
>>1557682У меня тоже такая проблема была, я просто делал проверку на изменение матрицы и запрещал удаление, если она менялась.
Сколько просить денег при устройстве плюсовиком? Город милионник в окрестностях москвы. Опыт какой-то есть. Сколько просить в москве если надумаю понаехать? Сколько платят например в мэйлру? Есть какая нибудь статистика по зарплатам? Накидайте советов в общем как себя вести при трудоустройстве.
>>1558221Конечно не жаловались, потому что те, кто бы жаловался, не будь у них выбора, перешли на нормальные языки.
СапЯ новичек в теме, могу глупостей написать, так что сореЕсть вопрос: Совместима ли библиотека json-c и c++, и если да, где найти гайды по работе с ней ?
>>1558410Почти все сишные библиотеки могут работать с С++. Конкретно json-c у нас где-то есть в проде, работает норм.Но я бы строжайше не рекомендовал использовать сишное говно в крестокоде - посмотри на самую правильную JSON либу существующую - https://github.com/nlohmann/json
>>1558274Мамой клянусь, усё сделаю.>>155824410 лет бд, формошлёпства и петов, всякая низкоуровневая поебота уровня ардуин. В общем не блидинг едж, всякую вычурную плюсовую пургу не вкуриваю, но задачи выполняю. Не задрот, проще говоря.>>1558266Это понятно что зависит. А как сориентироваться то?>>1558235Вообще я так понял нужно что-то более адекватное чем плюсы искать? Что посоветуешь для беспроблемного трудоустройства?
>>1558645>нужно что-то более адекватное чем плюсы искать?Если есть опыт разработки бэкендов высоконагруженных, обработки видео-аудио, блокчейны, компьютерного зрения и машинного обучения (тут хорошо бы еще питон знать), и т.п., то прекрасно устроишься и тебя всячески ублажать будут. А просто так С++ кому особо нужен? Это же не джава, на хороших плюсовых вакансиях он обычно идет плюсом к серьёзным задачам.Ну можно еще на какое-нить формошлептство на Qt и прошивку микросхем устроиться, но там зп микроскопическая обычно, сам же знаешь.
Как сделать код на qt приятным глазу? Вот например конструктор главного окна, по мне так выглядит просто отвратноhttps://ideone.com/1C87pk
>>1558951Нормальные люди запихивают свои формочки в *.ui и добавляют uic в pre-build step. В конструкторе у них остаётсяm_ui = std::make_unique<Ui::MoyaForma1>();m_ui->setupUI(this);
>>1558732В том то и дело что не знаю, какой расклад. Ну теперь понятнее стало. До этого фрилансил на другом языке и вообще трудоустроен был чисто формально. Вот думаю вкатиться в С++ или другой язык уже искать, посмотрел стату по зарплатам, вроде примерно одинаково все получают, а в случае с С++ предположу это будет поддержка говна мамонта. Высоконагруженный бек осилю, но опыта мало.
Аноны, буду очень благодарен, если вы подскажите, что и где надо статически слинковать, чтобы приложение qt не требовало дллок. До этого работал только в clion, там всего одну команду надо было прописать в cmake, а тут муть какая то.
>>1558971m_ui->moyaKnop_ochkaВсё как обычно, имена кнопочек задаёшь прямо в designer>>1559138Ну и что? Слинковал статически, открыл исходники
Прои создании программ на вижл меня достает то, что постоянно нужно создавать для каждой программы новый проект. Можно ли это как-то обойти?
Прои создании программ на вижл меня достает то, что постоянно нужно создавать для каждой программы новый проект. Можно ли это как-то обойти?
>>1559468Пиздец, а как по-твоему работать без проекта?Если ты очень ебанутый, можешь всё в одном проекте писать, но с разными конфигурациями, исключая при этом ненужные файлы из сборки
>>1558418Внутри вектора такое же говно на указателях, но вектор нихуя не зеро кост. Как минимум пуш бек каждый раз выполняет лишнюю проверку. Вот я зарезервил 1 млн элементов, пушбекаю, и у меня 999999 раз пройдет бесполезная проверка на сайз != капасити.
>>1559546Хуя ты экономист.Ты на IBM 5100 пишешь?Бтв проблема push_back не в проверке size != capacity.
Как объявить общую статическую переменную/метод для класса с шаблоном? То есть чтоб для MyClass<int>, MyClass<long> итд они были общими?
>>1559592Судя по большинству постов здесь, плюсовики вообще пишут исключительно уберхайлоад и исключительно для уберслабого железа. Поэтому язык и уходит из прикладухи, что вся эта перформансопетушня отпугивает новичков.
>>1559592Я про то, что плюсы пропагандируют "не платишь то что не используешь", и при этом у нас до сих пор нет метода unsafe_push_back
>>1559638Так-то благодаря предсказанию переходов и какому-нибудь if [[__builtin_unlikely]] (size_ == capacity_), эта хуйня почти не будет влиять на скорость. Да и не так страшен пушбэк, как сортировка пузырьком после него..
>>1559601Крестослесаря прост, шараги где учат крестослесарей. Специфика пахомии. Так-то видел вакансии в самых разных сферах, буквально вчера кресты шли в дополнение к аналитике с биг датами с окладом 400k в месяц на руки.
>>1559623Разве этот класс-член не будет уникальным для каждого типа шаблона? В гугле пишут, что нужно наследоваться от класса со статическим членом.
>>1559598Ну и говнище эти кресты, пиздец. Попытался повторить описанное, и при компиляции ругнулся даже не компилятор, а линкер нахуй.https://ideone.com/cINLKC
>>1559692Нешаблонный базовый класс, например>линкер нахуй.Дык очевидно: статическая переменная должна где-то жить. То, что в классе - это объявление, но она также должна быть определена в какой-нибудь единице трансляции. Также не забываем, что каждое инстанцирование шаблона - это отдельный тип.
>>1559678А теперь попробуй не внутри класса определить класс со статической переменной, а снаружи, внутри инициализировав его экземпляр.Теперь любой инстанс твоего шаблонного класса будут обращаться к классу снаружи с - о, чудо! - статическим членом.Ты не просто не понял, как работает генерация кода в этой ситуации.>>1559671Как вариант. Родитель - обычный класс, наследник - шаблонный.Ещё можно внутрь класса положить указатель на глобальную переменную, но это пахнет плохо совсем.
>>1559813Вот это истории. Если ты не понял, то>Лабы идут нахуйА если ты где-то работаешь - надеюсь, тебя нахуй уволят.
>>1559820Понятно все с тобой, хуйни насоветовал которая не работает, глобальные переменные блять, так еще и выебывается.
>>1559831Да кто ж тебе виноват, что ты слеп, глуп и не можешь погуглить и подумать? Конечно, анон с двача.
>>1559546тогда вместо reserve и push_back ты можешь использовать resize и [], но тут надо смотреть какой вариант по итогу будет быстреев любом случае современный способ поднять производительность в новых плюсах - это использовать механику перемещения, а еще лучше в комбинации с in-place размещением (move-конструктор и emplace_back)
Вкатываюсь на с++ джуна и заметил немалое количество вакансий с QT. Сам же я только погроммирувал под М$. Перед собесом иди изучать или забить, не сольют сразу?
>>1559981не, ну "по месту" ты его и так не сконструируешь, тк resize заполняет контейнер с использованием конструктора по умолчаниюно, если у тебя в классе элемента контейнера написан move оператор присвоения, то присвоение rvalue временного объекта через [] произойдет при помощи механики перемещенияp.s. тебе не кажется что использовать сажу с твоими текущими знаниями выглядит несколько высокомерно?
>>1559991да, есть вариант конкретно задротить qt (посредством прочтения пары книг по qt и запиливанием пет-проекта)ну и аплаится конкретно на вакансии связанные с qt, в этом случае почти наверняка устроишься, даже будучи без коммерческого опыта за спинойно стоит учитывать что зп будет одной из самых низких в отрасли - тысяч 80 в дс, тысяч 60 в дс2
>>1560048>resizeКто сказал что я ресайз использую? Речь по моему шла о reserve. В принципе нормальный ответ мне уже выше дали, к чему тут костыли с рвалью? Да и мув без исключений сейчас пишут редко, разве что дефолтный поставить и надеятся что компилятор разберется. к чему вообще был доеб до сажи я тоже не понял, она тред не топит и автоматом стоит
Зачем нужный модификаторы доступа? Почему нельзя обойтись просто структурами? Когда это вообще может быть необходимо?
>>1560052Главное забыл добавить, при резерве operator[] к обьекту, у которого не начался лайфтайм - уб, ты либо теряешь в производительности в любом случае
>>1560052ладно, давай, студентикпили дальше свою матрицу на голых указателяхуже неплохо что ты начал пилить диплом до нового года, прямо подвиг
>>1560055повторюсь, вместо того чтобы делать reserve и push_back, делают resize и [], это и позволяет не делать bound checking (о чем ты слезно и ныл, что мол это "медленно" и поэтому стандартный вектор - говно)
>>1560057А я ещё в техникуме свой диплом сделал за неделю на основе диплома из интернета по аналогичной теме, который мне дал куратор моего диплома.
>>1560063такое имеет смысл делать если хранятся в контейнере не объекты а указатели (умные указатели) на объектыну либо если хранятся примитивные типы в контейнерено, да, скорей всего и в этом варианте будет не быстрейв любом случае ты зря доебался до того что выполняется bound checking при push_back, там же эта проверка быстрая, по сути там идет не проверка больше/меньше, а проверка на неравенство указателей, те программиский прием guard-значения bool _Has_unused_capacity() const noexcept { // micro-optimization for capacity() != size() return (this->_Myend() != this->_Mylast()); }
>>1560067Перечитай мой первый пост. Я жалуюсь на то, что плюсы пропагандируют зеро кост, и при этом в одном из самых популярных контейнеров стандартной либы нет возможности сделать пуш_бек без проверок, что как-бы с зеро-кост слабо сочетается. А как там внутри реализовано это от компиля к компилю варьируется
>>1560069я тебе показал как делать вставку без bound checking в стандартный контейнеробычными средствами контейнера, между прочимникаких трюков
>>1559126>Аноны, буду очень благодарен, если вы подскажите, что и где надо статически слинковать, чтобы приложение qt не требовало дллок. В арчике для mingw есть qt5-base-static, в msys2 тоже готовый пакет идет. Под студию сам пердолься, собирай (но будь готов к тому, что какой-нибудь плагин неправильно скомпилируется, и придется вилкой чистить). В 5.13 статически слинкованое окошко с формочкой около 17 мегабайт, 8 после upx.
Я очень жёстко туплю, помогите кто-нибудь. У месть есть 2 текстбокса, в один я записываю цифры через пробел, жмякаю на кнопку и числа из первого выводятся во второй. Для этого нужно использовать стек обязательно. Я написал код, но числа выводятся В ОБРАТНОМ ПОРЯДКЕ. То есть, записываю я 1234, а он выводит 4321. Что мне переделать?System::Collections::Generic::Stack<int> stk; System::String^ str = System::Convert::ToString(this->txtIn->Text); str+= " "; int X, at, pos = 0; at = str->IndexOf(" "); while(at != -1){ System::String^ str1 = str->Substring(pos, at-pos); pos = at+1; bool res = Int32::TryParse(str1, X); stk.Push(X); at = str->IndexOf(" ", pos); } System::Collections::Generic::Stack<int> buf; System::String^ str2 = ""; while(stk.Count){ buf.Push(stk.Peek()); str2+=System::Convert::ToString(stk.Peek()) + " "; stk.Pop(); } while (buf.Count){ stk.Push(buf.Peek()); buf.Pop(); } this->txtOut->Text=str2; }
>>1560169>но числа выводятся В ОБРАТНОМ ПОРЯДКЕТы представляешь что такое стек, да? Это яма. Ты засунул 1, засунул 2, засунул 3. Пока не достанешь 3, извлечь 2 или тем более 1 тебе не получится.Тебе нужна очередь, а не стек.
>>1560174Я понимаю, что в данном случае очередь больше подходит, но в задании написано стек использовать.
>>1560169А, да, тебе достаточно заменить [str2=str2+System::Convert::ToString(stk.Peek()) + " "] на [str2=System::Convert::ToString(stk.Peek()) + " "+str2]. Или сделать то же самое на стадии считывания.Просто конструировать строчку таким образом очень неэффективно, а использование очереди во много раз разумнее и это мне показалось более важной проблемой, чем твоё нарисованное ограничение.
>>1560169Через указатели на первый элемент и на вершину и с помощью них уже выводи. Ну а так, правильно написали для этого очередь используют.
Собственно если у тебя прям строчка есть, то можно вовсе без стека - размер изначальной строчки известен, размер конечной строчки такой же, можно без стека напрямую переписывать первую строчку во вторую. Зачем тут нужен стек или очередь - не понятно. Просто так для галочки, записать в него, а потом считать из него.
>>1560180>[str2=System::Convert::ToString(stk.Peek()) + " "+str2]Спасибо, теперь всё как надо.>ачем тут нужен стек или очередь - не понятно. Просто так для галочки, записать в него, а потом считать из негоДля этого и нужен, для галочки.
>>1560169да вы заебали, добавьте в шапку гайд постить код на pastebin, в посте кидать ссылку на код и прикреплять скриншот кодапетухи бля
кстати, теперь ведь есть еще один стандартизированный способ разбиения строки на токены, а именно в библиотеке регулярных выражений есть regex_token_iterator
>>1560727>Несколько быстро работают регулярки в плюсах?скорее всего с производительностью, сравнимой с реализациями тех же самых регулярок в других языках программирования.. потому что регулярки ведь старая технология уже, как их оптимально реализовывать уже известно..
с регулярками в новом стандарте, кстати, щас стало можно по быстрому распарсить, к примеру, хмлку или json файлик..те не полноценно распарсить а выдрать данные..не надо подключать тяжелые библиотеки, тащить их в проэкт и все такое..
>>1560769You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML. Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions. Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The <center> cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes. HTML-plus-regexp will liquify the nerves of the sentient whilst you observe, your psyche withering in the onslaught of horror. Regex-based HTML parsers are the cancer that is killing StackOverflow it is too late it is too late we cannot be saved the trangession of a child ensures regex will consume all living tissue (except for HTML which it cannot, as previously prophesied) dear lord help us how can anyone survive this scourge using regex to parse HTML has doomed humanity to an eternity of dread torture and security holes using regex as a tool to process HTML establishes a breach between this world and the dread realm of corrupt entities (like SGML entities, but more corrupt) a mere glimpse of the world of regex parsers for HTML will instantly transport a programmer's consciousness into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection will devour your HTML parser, application and existence for all time like Visual Basic only worse he comes he comes do not fight he comes, his unholy radiance destro҉ying all enlightenment, HTML tags leaking from your eyes like liquid pain, the song of regular expression parsing will extinguish the voices of mortal man from the sphere I can see it can you see it it is beautiful the final snuffing of the lies of Man ALL IS LOST ALL IS LOST the pony he comes he comes he comes the ichor permeates all MY FACE MY FACE ᵒh god no NO NOOOO NΘ stop the an*gles are not real ZALGΌ IS҉ TOƝȳ THE PONY HE COMES
Ананасы, задумал тута сделать такую штуку.Реализовать паттерн наблюдатель для событий в программе, но чтобы у каждого коллбека была своя сигнатура.Как такое провернуть? Gизъёбываться с шаблонами и тюплами?
>>1561322Не изобретать велосипед и брать кют. Там уже рефлексия во все поля, можешь узнавать имя метода или объекта который тебя вызывает например.
>>1561322Зачем такое может быть нужно? Разве ты не явно контролируешь, где и чем эти калбеки будут вызваны? Багор какой-то.
>>1561488Разные события и с ними идут свои параметры (или их может не быть вообще) поэтому сигнатура не всегда одинаковая.Короче, пока решил сделать так: класс Event, в нём массив\вектор из строк, затем они будут преобразовываться в нужный тип (вроде int, float и тп).>>1561507А хер их знает. Думал может быть как-то можно хранить и передавать тюплы.
>>1561616> Сделай объект, который будет состоять из маркера и каллбека и оперируй им. Разверни свою мысль
Нужен автокликер для одной игры. Юзать готовые - не вариант, ибо там вся реализация через апи ос, которые игра детектит. Надо как-то на аппаратном уровне имитировать нажатие клавишь. Нашел что-то про HID протокол, потом нашел libusb упрощенную обертку для управления этим протоколом. Пока особо документацию не читал. Перед этим хочу узнать, туда ли я вообще копаю? И насколько это реально сделать программно, не понимая и не зная как вся эта микроконтроллерная хуйня устроена и как она погромируется?
>>1562230Драйвер свой напиши. Примеры драйверов мыши и клавы есть были в ресурс ките. Драйверы работают с другим API, займёт время разобраться. Х.з. какие у тебя задачи. Я вкорячивал в свой драйвер скрипт-энджин, которому подсавывал свои скриптики в рантайме.
>>1562238А драйвер этот, он же должен быть вшит в микроконтроллер? Т.е. мне надо еще покупать саму деталь, паять схемы какие-то? Свою клавиатуру я вряд ли рискну портить своими "драйверами". Мог сейчас хуйню написать, просто я вообще не имел с этим дела и имею 0 представления об этом всем. Но с классическим программированием я знаком и с/с++ владею.
>>1562238И еще, что за ресурс кит? Ничего не могу нагуглить, кроме каких-то утилит, которые входили в какой-то пакет мелкософта в 2003 году.
>>1562230Что за игра? Возможно сработает метод с очисткой флага эмуляции. Для этого потребуется зарегистрировать свой глобальный хук. В ином случае придется писать драйвер, а это задача не для ньюфага. Еще можно взять готовый драйвер, который предоставляет подобный функционал, такие тоже существуют.
>>1562230Vjoy не работает? У меня он во всех играх работал без подводных.Можешь взять и перелопатить драйвер для планшетов ещё: https://github.com/hawku/TabletDriver - наверное там есть все нужные тебе куски кода.
>>1561598Хуйню изобрел. Джаваскрипт какой-то. Если у тебя несколько событий, о которых нужно уведомлять наблюдателей, сделай несколько сигнатур колбэков - по одной на каждый тип событий.
>>1562257Аллоды онлайн. С хуками дела тоже не имел. Это что-то на уровне демонов? Насчет драйверов я вообще сомневаюсь, я не знаю как это все устроено и работает, соответственно и нагуглить вряд ли смогу. Я вчера пробовал искать туториалы по написанию драйверов и даже понять не смог, то ли я вообще нашел.>>1562258Не пробовал, но пробовал около десятка других, ни один не работал. Только AutoHotKey кое как брыкался. Пару раз кнопка сработает и все. Пробовал обманывать, менять частоту случайным образом между нажатием - не помогло. Заметил только, если самому нажимать любую клавишу вручную, то тот скрипт снова пару раз отрабатывал и глушился. Явно защита какая-то в самой игре. Сейчас попробую с vjoy.
>>1562258Что это за vjoy вообще? Это какой-то эмулятор клавиатуры для геймпадов/джойтиков типа xpadder? Мне-то автокликер нужен был.
>>1562355Эмулятор джостика-мышки-клавы. Грубо говоря, если ты собрал на условной ардуине свой кастомный джостик для вертолёта и не хочешь писать к нему сложный драйвер с вниканием в winapi, то ты можешь за несколько строчек написать всё что тебе нужно через vjoy, и игра сможет понимать твой джостик.Никто не мешает тебе использовать его без джостика для автокликера и вряд ли много какая игра специально блочит vjoy.>Явно защита какая-то в самой игре.Я бы смотрел одинаковая ли задержка между нажатиями, и чтобы между событием нажатия и отпускания было адекватное время, если бы делал защиту.
>>1562364Вот мой простой скрипт для нажатия клавиши z для autohotkey.Loop{ Random, sleepHold, 153, 257 Random, sleepWait, 1153, 5059 Send, {z down} Sleep, sleepHold Send, {z up} Sleep, sleepWait}Значения, вроде, адекватные, но работать стабильно не хотят. А насчет vjoy, я мало что понимаю. Открыл конфигуратор, ничего полезного не нашел для себя. Потом еще погуглил, я правильно понимаю, что мне нужно написать некий "feeder", который надо будет каким-то образом скомпилировать и запустить средствами vjoy? Насчет документации, нашел только какой-то мануал в sdk, который не уверен, что вообще нужен мне. Речь, ведь, шла о просто vjoy, как о самостоятельной утилите, а сейчас выясняется, что, похоже, еще и какие-то пакеты/библиотеки надо докачивать. Я не жалуюсь, просто я не понимаю: в том ли я вообще направлении двигаюсь.
>>1562374пчел, в некоторых играх скрипты запрещены, так что ты либо пишешь свой драйвер, либо идешь нахуй из тредамимокрок
>>1562387>мимокрок>идешь нахуй из тредаэто еще че такоеесли ты не заметил, то рандомные вейты там это как раз способ обойти некоторые "запреты на скрепты", работающие на детектировании одинаковых задержек, так что ты либо вникаешь в цепочку постов, либо идешь нахуй из тредамимокрок
>>1562387Так я и не против. Вы мне импульс хотя бы дайте какой-то. Я никогда не писал драйверов и слету вот так понять не получается. Я даже не понимаю то ли я гуглю... Вот, мне про vjoy написали, это не скрипт, насколько я понял. Но на мои вопросы, касаемо него, пока еще не ответили.>>1562388У меня она геймерская, но макросы не поддерживает. Хотя... Мб где-то в закромах древнюю х7 можно поискать...
>>1562389обезьяна, ты не понял. он либо обдрачивается сями и пишет свой драйвер по хардкору, если уж он хочет нечестно играть против обычных игроков, либо идет нахуй со своими шизофреническими проблемами с автохоткеем, потому что это оффтоп и щитпостинг.>>1562391>Я никогда не писал драйверов и слету вот так понять не получаетсяв программерс тредах такой обсурд писать да ты совсем охуел
>>1562397>если уж он хочет нечестно играть против обычных игроковОй, блядь, началось... Я никак не связан с игроками и на их процесс игры вообще никак не влияю этими действиями. Ты какой-то обиженный, я смотрю. Не хочу с тобой общаться.
>>1562230>Нужен автокликер для одной игры>>1562399>Я никак не связан с игрокамипанимаешь, чмоха, просто так в игры не добавляют защиту от скриптов, ее вообще почти никогда не добавляют, значит скорее всего ты играешь в какую то онлайн дрочильню, где макросы создают такое преимущество, с которым разрабам приходится бороться. следовательно я делаю вывод, что ты пиздабол ебаный и идешь нахуй, даже не сказал какая игра, такая ты гнилая паскуда
Вообще, касаемо драйверов. Мне же нужен драйвер на стороне устройства, а не пк. Хотя, возможно, и там и там они потребуются. Драйвер на устройстве бы посылал сигнал нажатия клавиши, а драйвер на пк получал бы его и передавал ос. Я это понимаю пока что только так. Могу ошибаться. Но если все же я прав, то мне понадобится каким-то образом перезаписать драйвер микроконтроллера клавиатуры своим. А это может повлечь за собой не работающее устройство, которое я своими силами уже вряд ли смогу восстановить. Да и вообще, насколько я знаю, для установки прошивки на микроконтроллеры нужно доп оборудование, которого у меня нет. Короче, пока не особо все ясно.>>1562410Ну и мерзкий же ты, а еще ты слепой.
>>1562412>перезаписать драйвер микроконтроллера клавиатурыты либо пишешь драйвер для своего кумпуктера и пользуешься им и не трогаешь устройство, либо делаешь эмулятор на хуярдуине и не трограешь драйвер. у тебя два выбора потому что свою клавиатуру за сотку ты перепрошить в этой вселенной точно не сможешь.
Как вкатиться в котрибученье в буст или в другие суперлибы? Я чувствую, что готов, но не знаю с чего начать.
>>1562418Посмотреть Антона Полухина или другие лекции по словам "контрибученье в буст". Но наверняка ты это уже делал, раз "готов".
>>1562418Открываешь гитхаб, выбираешь проект, чё-то пишешь, делаешь пулл-реквест и засовываешь его себе в задницу
>>1562415Я конечно не эксперт по драйверам, но.. на фоне этого треда ещё какой - написал аж целый один, хоть это и был курсач на втором курсеКороче, есть стэк драйверов. В винде они ещё делятся на фильтрующие, генерирующие, и какие-то там ещё, похуй. Между ними определены интерфейсы, нижние драйвера принимают хуйню, что-то с ней делают (в основном преобразуют для соответствия интерфейсу), и передают верхним.По идее, тебе нужно написать драйвер и подсунуть его куда-то в стек клавиатуры (желательно в конец, но опять же похуй). Он будет просто пропускать сообщения, но иногда по внешнему сигналу будет создавать свои. Выглядит не так уж сложно, может даже получится отмахаться одним UMDF. А общение себя с драйвером для начала лучше организовать через файл, иначе заебёшься. И лучше заниматься всем этим в виртуальной машине, потому что на синие экраны ещё насмотришься.Почитать про всё можно например здесьhttps://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/device-nodes-and-device-stacks https://github.com/microsoft/Windows-driver-samplesВ любом случае, это развлечение как минимум на неделю, так что лучше поищи человеческое решение.
Обосрался с советов итт, пчел с аутохоткеем разобраться не может, а вы ему драйвера предлагаете писать. Это аутист даже не изучил доки ахк, а там ведь черным по белому написано, что по дефолту ахк использует жиденький метод инпута, который игра тупо не обрабатывает. Пусть выкидывает нахуй свое скриптоговно и пишет код на нормальном языке, напрямую обращаясь к винапи. SendInput, скорее всего в этой поделке мейлсру будет работать.
>>1562510Какой еще жиденький метод инпута? Все эти программы как раз и используют винапи. Только что в макс пейне проверил, там все работает, ибо защиты там никакой нет. А в том дерьме от мейлсру оно есть, внезапно. Не будет винапи работать, я в этом уверен.
>>1562523>>1562527>>1562510Я знаю. Я и сам особо не хочу сейчас ебаться с этими драйверами, ибо мне нужно побыстрее получить результат. Потом уже, для себя, можно было бы попробовать, в принципе, давно уже хотел попробовать, но руки не доходят. Про vjoy мне выше писали. Попробую пока его покурить. Хз что выйдет из этого. Если ничего не выйдет за несколько дней, то пойду спаяю какой-нибудь простенький генератор импульсов, который будет дрочить реле, лол. Надо было его, наверное, сразу собрать.
Какие свойства есть у xor? Нужно решить уравнение с ним в целых числах или установить что корней нет. Как понять что корней нет?
>>1562527Такой еще жиденький метод инпута, открой доки ахк и посмотри. Не те апи он использует, вместо эмуляции нажатия кнопки, посылает сообщение игре, которое игра не обрабатывает. SendInput будет работать, ставлю жопу. Если нет, то как я уже писал выше, игра скорее всего регистрирует свой глобальный обработчик, который обходится регистрацией своего обработчика поверх этого.
>>1562542в обратную сторону ксеришь.(x+a1) xor (x+a2) xor (x+a3) ... xor (x+an)= bx = (((((b xor (x+an)) ...) xor (x+a3)) xor (x+a2)) xor (x+a1)) - a1
Как оптимизировать программу и находить возможные ошибки? Вот у меня код по времени не проходит, хотя алгоритм как по мне оптимальный. Может быть у меня вобще ошибка не связанная с алгоритмом. Например перепелнение переменной
>>1562587В смысле как? Дебагер в руки и искать, думать, тесты писать на простые и сложные случаи. Профайлеры, асаны, детектеры утечек, тысячи их.
>>1562587>алгоритм как по мне оптимальныйНу а как оно по оценке О(...) по времени и по памяти, можешь примерно почувствовать? Или хотя бы подрочи тесты разного размера, чтобы узнать с какого начинает таймаутить.
>>1562589>>1562590>>1562592Мне кажется проблема не алгоритмическая, а реализации. Прогнал макимально сложные входные данные из первой группы. Все ок. Может у меня из цикла например программа не выходит в том месте где должна. Как мне искать ботлнеки? Есть программы, которые помогут?
>>1562594берёш дебаггер@ставиш брейкпоитны в интересных местах@запускаеш@смотриш значения переменныхСудя по вопросу, это какое-то олимпиадное дрочево. Странно что вас там не учат отладчиком пользоваться. Полезно еще ассертов насовать везде.
>>1562597> Судя по вопросу, это какое-то олимпиадное дрочево.В точку> Странно что вас там не учат отладчиком пользоваться. Полезно еще ассертов насовать везде.У меня с компом последнее время проблемы и кучу времени приходиться тратить просто на компиляцию и приходится испольщовать онлайн компилятор. Видимо придется. Спасибо.
>>1562599Если не хочешь ебаться с 20-гиговой M$V$, накати по-быстрому code::blocks. Лучшее в чем можно строчить однофайловые задачки. Дебаггер там тоже хорош хотя уже 10 лет не могут сделать нормальное отображение stl
>>1562602> Дебаггер там тоже хорош хотя уже 10 лет не могут сделать нормальное отображение stlПроиграл
>>1562603Я тоже. При помощи нечеловеческой ебли с питоном и подстановкой левого компилятора мне однажды удалось это починить. Но затем там ещё что-то поломалось.Хуле делать - добавляем в watches v.data() как массив. Про 10 лет, кстати, не шутка. Проигрывал еще с бугуртов на ихнем форуме >Sigh ... do you need any more explanation why M$'s comm. ed. is so popular?>Do you want my opinion about a development chain where nothing fits together, and debugging vector[1] is impossible?...
>>1562609но вообще в своё время я пилил олимпиады на чистом С, как деды воевали, и на эти крестопроблемы мне было поебать.
>>1562597Меня тоже не учили им пользоваться, но я сам придумал везде вставлять printf, а потом и cout. Оказывается, смекалочка уже и тогда работала. Надо было вместо вузика сразу ентерпрайз свой запускать...
>>1562602И нахуя ты посоветовал ему какое-то дерьмо динозавров? Почему сразу devcpp какой-нибудь не посоветовал? Или вполне себе годный vscode?
Ребят, у меня куча объектов, связанных между собой указателями. Какие готовые решения, чтобы сохранить это все на диск, а потом загрузить с него? Может, в Boost что-то есть?
>>1562636Вообще нихуя не понял. Шизло какое-то. Нахуя тебе их сохранять, блядь? Запускай бинарник заново.
>>1562636Делай мапку указатель-объект, при сохранении так и записывай указатель, при чтении достаешь реальный объект из мапки и обновляешь значение указателя
>>1562636тебе нужно сделать сериализациюкак минимум нужно сначала будет выбрать формат хранения - бинарный, текстовый, в базе данных, десятки вариантовпотом надо еще учесть ты будешь писать свой велосипед или использовать готовые библиотеки.. выбор всего этого зависит от того что за софт ты пишешь..в бусте есть библиотека для этого, она так и называетсы boost serialization, но за ее удобство ничего сказать не могу
>>1562594Показал бы код, чтобы понять какого рода ошибки там могут быть и в какую сторону думать - вдруг ты там вовсе расстояния вместо квадратов расстояния сравниваешь, а при проходе по двумерному циклу используешь / и %, вместо двойного цикла. Без кода никто кроме тебя не скажет в чём проблема и что фиксить.
>>1562533Не работает sendinput, только что проверил. Код https://pastebin.com/rCcWQqgh >который обходится регистрацией своего обработчика поверх этого. Можно поподробней? Что значит регистрирует обработчик? И что значит обойти обработчик? Если это как-то связано с дизассемблированием, то я не думаю, что справлюсь. Я могу только ипконфиг прописать для взлома... Похоже, на реле собирать ключ для замыкания кнопки куда проще...
>>1562701Какой там античит? Твое не работает очень информативно. Отладь программу и посмотри почему не работает, для начала получи статус возврата и загугли его значение. https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexw WH_KEYBOARD_LL, WH_MOUSE_LL, очистить поле flags в соответствующих структурах.
>>1562878Попробуй тогда вынести b в начало. Сделай там reserve(n), а в цикле resize(). Чтоб не дрочил память туда-сюда.
>>1562886Хорошо. Это действительно даст ощутимый прирост? Я конечно сделаю так, поскольку выбора нет, но спрашиваю ради интереса
>>1562890И почему resize тем более несколько. У меня же размер b меняется быстрее выделения. Мне казалось ресайз просто создает еще один вектор на n элементов и переносит n элементов из массива с k элементами, а потом удаляет массив с k элементами
>>1562866Блядь, не работает. Ты понимаешь это слово? В этой игре, блядь, не работает! Везде работает, в играх/блокнотах/хуетах, но в этой игре НЕ РАБОТАЕТ. А знаешь почему? Потому что там ебучая защита, сука, и винапишное говно там детектится! Я тебе еще сразу об этом сказал.>>1562868Да, так и хотел, wVk установлен на z.
>>1562866И что это за ссылка? Это и есть "регистрация обработчика"? На первый взгляд показалось, что это просто способ для общения с определенным окном без фокуса на нем.
>>1562949Я ебу что там в игре у тебя? Выясни для начала какая там защита, а потом уже думай, как ее обходить. Нет, блядь, буду пальцем в небо тыкать. >>1562955> Installs an application-defined hook procedure into a hook chain. You would install a hook procedure to monitor the system for certain types of eventsТы вообще читал или это тролинг тупостью? Я ведь тебе сразу сказал, что нужно делать >>1562257 , а ты тут срешь уже второй день и копротивляешься.
>>1562983Я читал, но нахуя отвечать не в свою цепочку постов? Я еще вчера тебе написал, ты ничего не сказал/не ответил. Потом ты пишешь от лица анона, который советовал регистрировать какие-то обработчики. Вопрос с дровами уже закрыт, я не стану их писать и тратить на них сейчас свое время. Я вообще пока ничем особо не занимался эти дни. Нет возможности пока сесть и дрочить доки да и вряд ли будет. Уже реально скорее соберу на ne555 какой-нибудь таймер и подпаяюсь к кнопке. Я не ебу какой в игре античит, я вообще сомневаюсь, что можно где-то найти эту инфу на это говно в которое играет 500 человек. А даже если и можно, то что это даст? Один хуй исходников нет и что там происходит на самом деле в коде не известно.Насчет хуков эти хз, не особо пока понятно зачем это и как работает/что дает. Немного позже почитаю про них, попробую. Вон, вчера один тоже доказывал, что sendinput будет работать, с чем я был не согласен. И что в итоге? Тоже самое и хуков касается, если я вообще смогу разобраться и что-то внятное с ними написать.
>>1562993Это я тебе и писал, просто ты тупой как пробка. Если не хочешь ни в чем разбираться, то берешь вот этот готовый драйвер и внимательно читаешь его документацию. https://github.com/oblitum/Interception
есть main.cpp, в нём определеноconstexpr char null_char = '\0';есть token.h и token.cpp, в которых используется null_char. Если я пишу в token.hextern char null_char;main.cpp(8,16): error C2373: 'null_char': redefinition; different type modifiersесли ничего не пишу в token.htoken.h(22,16): error C2065: 'null_char': undeclared identifiertoken.h(22,16): error C2065: 'null_char': undeclared identifiertoken.cpp(11,12): error C2065: 'null_char': undeclared identifierКак сделать, чтобы одно и то же constexpr использовать в разных файлах?MS Visual Studio 2019 Community
>>1563130Во-первых, extern const.Во-вторых, проверь вот это, хотя для новых проектов должно быть включено по умолчанию.https://docs.microsoft.com/en-us/cpp/build/reference/zc-externconstexpr?view=vs-2017В третьих, inline constexpr прямо в заголовке, компилятор сам позаботится, чтобы ты odr не нарушил
>>1563170>Во-первых, extern const.Не пашет. Вернее, работает, но как константа. Т.е. внутри switch нельзя запихнуть в case:>Add /Zc:externConstexpr or /Zc:externConstexpr- to the Additional options: pane.Не помогло.>В третьих, inline constexpr прямо в заголовке, компилятор сам позаботится, чтобы ты odr не нарушилНе понял. Что куда? Что писать в main.cpp, что писать в token.cpp, что писать в token.h? Могу сделать main.h, если надо, и его включать всюду.
>>1563216> Не понял. Что кудаВ хедер, в cpp'шник ничего писать не надо, только использовать. Только не забудь С++17 включить.
>>1563221 >>1563225Давай на простом примере. main.cpp:#include "token.h"int main() { char ch; std::cin.get(ch); switch(ch) { case '0': std::cout << "zero\n"; break; case null_char: std::cout << "no\n"; break; default: std::cout << "yes\n"; } return 0; }token.h:#include <iostream>token.cpp:#include "token.h"void f() { char ch; std::cin.get(ch); switch(ch) { case '0': std::cout << "ZERO\n"; break; case null_char: std::cout << "NO\n"; break; default: std::cout << "YES\n"; } }куда писать constexpr char null_char = '\0';или inline constexpr char null_char = '\0';что ещё куда писать
>>1563261Ты чего ругаешься? Кроме емакса с вимом разных вкусов толком то и нет ничего. Электронопомойки же фуфуфу
>>1562228Ладно. Как это сделать? Компилятор ругается, если я пытаюсь присвоить значение какой-то области памяти, на который указывает указатель, если в этой ячейке памяти не объявлена переменная. Как ещё можно сделать лист без библиотеки list, если не так?
>>1563311Берешь и без задней мысли делаешь:template<typename T>struct ListElement{ T data; ListElement element;};template<typename T>class List{private: ListElement<T> head;};
>>1563261>Какой блять вимСоснольный или гуёвый.>какой емаксСоснольный, обычный ванильный саморучно напердоленный, spacemacs, doom emacs.Выбирай.
>>1563322С такой записью можно создать список из неопределённого заранее количества элементов? Как это работает? Уже встречал такой такое без шаблонов, но самого разбора работы такого кода так и не увидел.
>>1563330Погугли же епт. Туториалы, тысячи ихтут вот на смартпойнтерах к примеру https://solarianprogrammer.com/2019/02/22/cpp-17-implementing-singly-linked-list-smart-pointers/тут попроще https://towardsdatascience.com/linked-list-implementation-guide-16ed67be18e4 но с малоками ебучими. хоть new быХранишь указатели на предыдущий и следующий, или только следующий элемент. При вставке алоцируешь память и прицепляешь куда надо (в хвост, в голову).Кстати std::forward_list так и сделан https://github.com/microsoft/STL/blob/master/stl/inc/forward_list
>>1563260Естьconstexpr char null_char = '\0’;Его надо использовать в разных файлах: main.cpp, token.h, token.cpp. Причём его надо использовать именно как известное на этапе компиляции выражение, чтобы его можно было использовать как case в switch, причём во всех файлах.Как это сделать?
>>1563277Мне сложно придумать ситуацию, когда придется собирать на всратом тостере, кроме разве что совсем экстремальных ситуаций, когда рабочий комп сгорел нахуй, а времени позаимствовать у кого-нибудь лишний ствол ноутбук нет, нужно собрать здесь и сейчас. Правда встает вопрос, откуда у вас тогда взялся всратый тостер.Олсо, вимом и имаксом удобно пользоваться, когда нужно отредачить пару-тройку строк где-то на удаленной машине, но если строк много, то проще перекинуть файл на рабочий комп, отредачить и перекинуть обратно.
>>1563377Разобрался. Я включал хэдер, в котором constexpr, в другой хэдер.Переформулирую вопрос более глобально: хэдеры в хэдеры включать плохая практика? Я совсем начинающий.На работе легаси-говно, там хэдеры включаются и в сорсы, и внутрь других хэдеров.
>>1563465Потому что вылезла вот эта проблема с constexpr, что их инклюдить можно только в .cpp . Иначе не компилируется.
>>1563461> На работе легаси-говно, там хэдеры включаются и в сорсы, и внутрь других хэдеров.Блядь, а как ты хотел? Пиздец, мой ор наверное весь офис через океан услышал
Какие есть библиотеки которые могут делать за меня часть работы? Например в питоне легко переводить число в строку и обратно. Есть срезы строк. Очень удобно, но медленно
>>1563364Блядь, я удивляюсь терпению анона, который тебе все эти ссылки дал.Неужели так сложно написать в ебучий гугл "реализация односвязного списка c++" и нужно ебать мозги другим анонам своей тупостью?
>>1563540> Например в питоне легко переводить число в строку и обратно.Ты думаешь это так просто? Если не нужно учитывать локаль - тогда да, просто. std::to_chars, std::from_chars.> Есть срезы строкПосмотри, что там c++20 предлагает
>>1563708Это немного не то. Для него 1, 2, 3 и 2, 3, 1 разные последовательности. Но это одно и то же сочетание. Мне нужно именно сочетания. K из n вот это вот все. Например сочетания из 4 по 2 это1, 21,31,42, 32,43,4. А next permutation вернет и 1, 2 и 2,1 как разные последовательности
>>1563713Тебе быстро ннада?Если нет - то применяй next_permutation к вектору и копируй его содержимое в мапу с ключом-сетом.То есть у тебя сначала вставится сет (1, 2), потом ты скопируешь вектор (2, 1) в сет, там он отсортируется и станет сетом (1, 2) и при вставке в мапу дубля не будет.Говно, но быстро и на коленке.Бтв, господа, вы щупали уже модули от майкрософта?Я смог скомпилить со стандартными, но свои даже по туториалу не робють. И интеллисенс умирает после первого же #import.Или пока нет смысла это трогать?
>>1563673to charts и from chars выглядят очень удобно, жаль половина компиляторов не поддерживает это. Вот чем меня раздражает c++, то это раздутость. Куча функций и хз что использовать. Берешь одну, потом оказывается что она параметр string не принимает и приходится переводить в c_string(). Пиздец какой то
>>1563716Хотя сет сетов лучше будет.Единственный момент - я не помню, может ли быть map<set<int>, smt_other> или set<set<int>>, там же отношение порядка требуется, вроде как.
>>1563747Ради таких мометнов и стоит читать тред..Хоспади, блять, помоги. Ору так, что мать скорую вызвала. А на strlen(b.c_str()), да еще в цикле, вообще чуть от ифаркта не откинуся.Штош ты делаешь, содомит. скорей бы тебя отчислили
>>1563756Это же ещё сишный прикол.Чтобы из символа цифры получить инт - нужно код нуля вычесть из нее и привести к инту.Можно статик каст опустить, будет неявное приведение все равно.А вообще atoi просто принимает не символ, а строку, поэтому у тебя ошибка. Да и лучше тогда std::stoi использовать, он прям с std::string работает и с разными базами, хоть из троичной переводи в инт.Разве что она бросает исключение и во второй аргумент записывает позицию, в которой случился косяк.
Что аноны могут сказать по поводу JUCE? В моей конторе, на нескольких проектах кроме juce ничего не разрешают использовать.
>>1563785Напиши хоть, что сделать-то просят в задании на лабу.По скрину непонятно нихуя, кроме любви к постоянным вызовам to_string от одного значения.цикл по i не в том направлении
Ананасы, нужна ваша помощь.Благодаря быстрому интернету я не имею возможности поставить VS 2017 или 2019 для компилирования swift shader. Раздобыл четвёртую версию, она работает, но вот беда, мамин прогер почему-то поставил потолок для ядер всего шестнадцать, хотя для приличия надо 65536 минимум.Есть тут сверхчеловек, который его поменяет, скомпилирует и кинет готовые дллки сюда?Ссылка на исходникhttps://github.com/google/swiftshaderНа картинке то, что нужно изменить, возможно, где-то ещё, но я не нашёл, для начал этого достаточно будет.
>>1563840Блядь, там ещё в сравнении забыл 16 на 65536 поменять. Вобщем на картинке то, что должно быть после замены
>>1563848Возможно, я cmake на вынь 10 попробвовал поставить и тут меня ждало поражение, ведь даже ему нужны какие-то куски от 2017 и 2019 ВС.
>>1563716> Бтв, господа, вы щупали уже модули от майкрософта?Вообще, там странно всё. Cppreference говорит, что в msvc нет модулей, хотя они там очевидно есть.В тред призывается нвидия-кун
>>1564010Официально нет, это экспериментальная фича, как asan.Но на msdn тутор есть, хотя у меня не удалось. Но это и я могу быть дебил, а не у них что-то не так.
>>1564020Да вроде по тутору они роблять вполне, с /experimental:modules. Мило выглядит. А чо у тебя не так?
Я верно понимаю, что при каждом вызове строки Node *nd = new Node; в nd записывается НОВЫЙ адрес? Если да, может ли он случайно повториться?
>>1564042Вот я это сделал все, если импортил std.core - то тоже мило выглядело и компилилось, но сразу ломался интеллисенс.А свои модули делать вообще не получалось, хотя все по тутору организовал и с расширением .ixx(вроде такое, не помню точно).моча, ты совсем охуел? Где я спамлю или вайплю?
>>1564080Может быть просто "nd = new Node"? Ты не можешь два раза написать "Node *nd".>в nd записывается НОВЫЙ адрес?Да.>может ли он случайно повториться?Только если предварительно освободишь старый.
>>1564129>Может быть просто "nd = new Node"? Ты не можешь два раза написать "Node *nd".Эта строка в классе, класс циклически вызывается в маин.
>>1564147всмысле так?for (...){ MyClass(); ...}или такfor (...){ MyClass с; ...}Тогда если ты не делаешь delete nd в деструкторе а я на 80% уверен что не делаешь, то у тебя течет память.
Unsigned char arr[100] ;Unsigned Int x = (unsigned int) & (arr[50]);Кто нибудь может подсказать что происходит во второй строке кода?
>>1564411Проверить не быстрее, чем спрашивать?Интерпретируешь указатель на 50 ячейку, как на unsigned (50-53 ячейки) (почему они у тебя с большой буквы?).
>>1564426вообще-то ничего там не интерпретируют, а просто небезопасно усекают адрес в формате ptr64 в uint
>>1564429Там же две звёздочки затёрлись из-за того что борда уже пять лет не может позаимствовать обособление через `` из дискорда.
>>1564426>>1564429Спасибо за информацию. Unsigned с большой буквы потому что пишу сейчас со смартфона.
>>1564604Речь о qt если что. Вообще, при нажатии на кнопку, мне нужно чтобы она вызывала сигнал передавая в него свои координаты.
Является ли хорошим тоном написать в начале класса private:, если у меня в начале класса идут приватные объекты? Или можно с этим не замораживаться? Если действительно нужно так писать в классах, то почему в структурах обычно не пишут в начале public:?
>>1564604Без задней мысли подключаешься, qt сам всё сделает. Сигналы посылай как обычноemit somethingChanged(newPt);
>>1564905В смысле блять? Вот есть класс mainwindow, он у меня содержит вектор векторов содержащих указатели на кнопки. При нажатии другой кнопки этот веутор векторов заполняется динамически созданными кнопками. И где мне взять сигналы и слоты этих кнопок?
>>1564954# define public public:# define private private:class MyAwesomeClass {public int a;public int b;private int x;private int y;};
>>1563068Короче, время появилось, решил попробовать с хуками ебаться. Первое с чем столкнулся. SetWindowsHookExW возвращает 0, погуглил и понял, что надо получить дескриптор к пути dll, где эта функция описана, как-то так>HINSTANCE dDLL = LoadLibrary(TEXT("c:\\path\\something.dll"));Но в msdn сказано, что LowLevelKeyboardProc находится в windows.hВот текущий код регистрации хука>HHOOK dProc = SetWindowsHookExW(WH_KEYBOARD_LL, LowLevelKeyboardProc, NULL(тут dDLL нужен, по идее), processId);Какую dll загружать тогда?
>>1565151Убрал конкретный PID, путь к адресу функции указал в текущем модуле, теперь SetWindowsHookExW возвращает отличное от нуля значение. Код https://pastebin.com/npprysU8Не понимаю. Разве не должна колбек функция вызываться при нажатии кнопки в любом процессе и выводить на экран консоли процесса, который этот хук запустил "!!"?
>>1565230Пошел нахуй токсик тупорылый.Спрашиваю у нормальных анонов. Один и тот же хелло-ворлд, но msvc каждый проект компилит по разному. В настройках все одинаковое, вообще ВСЕ одинаковое. Почему так?
>>1564411>Кто нибудь может подсказать что происходит во второй строке кода? Нарушение т.н. strict aliasing rules.
>>1564923Не работаетdf.push_back(new QPushButton("f",this));df[j]->setGeometry(50i,50j,50,50);df[j]->show();connect(df[j], &QPushButton::click, [=](){QLabel lbl; lbl.setNum(i*j); lbl.show();});Пишет QObject::connect: signal not found in QPushButton
>>1565302> Пишет QObject::connect: signal not found in QPushButtonА ты не очень умный, раз не понял, что click - это не сигнал
>>1565460Проблема оказалась в этом> QObject *senderObj = sender();> lbl = new QLabel("f");> lbl->setText(senderObj->objectName());> lbl->show();Если убрать предпоследнюю строку, все работает и лейбл выводится. Почему не ясно.
>>1565481Ты parent лейблу установил? вообще, не еби мозг, создай сразу всё, а в рантайме меняй видимость
>>1565513Нет, не установил, да и думаю не в этом проблема. Сейчас интереса ради сделал такое> QObject *senderObj = sender();> senderObj->setObjectName("ef");И тоже не работает.> вообще, не еби мозг, создай сразу всё, а в рантайме меняй видимостьНе особо понимаю как мне это поможет на самом деле, создавать то все равно придется в цикле.
>>1565561Было бы что кидать, я ведь только начал делатьhttps://ideone.com/187xKbА размер поля может ведь задаваться пользовательский
>>1565564Лучше создай в своём окошке qgridlayout, ему установи размеры и в него запихивай кнопки, тогда можно избавиться от setGeometry и show
Анон, который советовал хуки писать для перехвата глобальных обработчиков, ты тут? Нужна помощь.На текущий момент написал глобальный хук, который обрабатывает нажатие клавиши в любой программе, просто информируя об этом в консоль.Вот код (1 вариант): https://pastebin.com/47cPEVHyВ чем была твоя основная идея? Я пробовал использовать SendInput в этом обработчике, чтобы зациклить нажатие, но игра все равно не воспринимает его. Я мог не правильно понять тебя, поэтому уточняю.Вот (2 вариант): https://pastebin.com/YGnQYCHx
>>1566268Или мне надо было переопределить эту функцию LowLevelKeyboardProc из какой-то системной библиотеки, указав третий параметр функции SetWindowsHookEx?
>>1566274Короче, сейчас переписал без хука (хотя, и с ним тоже работало), используя только цикл с sendinput, но отправляю не виртуальные коды клавиш, а скан-коды. Игра обрабатывает только пару таких sendinput'ов и перестает обрабатывать остальные, пока я сам не нажму любые клавиши на клавиатуре, после чего все повторяется снова. Текущий код: https://pastebin.com/MzzFXeZm
Почему я не могу найти разность между двума указателями на разные типы? Почему компилятор вообще ебет какие там типы? Пусть молча берет чертовы адреса и вычитает.
>>1566268Для начала пронумеруй все глобальные обработчики и посмотри устанавливает ли игра свой. Может они вообще драйвером блокируют инпут, я не знаю. Скажи какой там античит. Я тебе уже сказал про железобетонный способ с использованием готового драйвера. Качаешь, устанавливаешь и шлешь запросы этому драйверу, он их обрабатывает и нажимает кнопки.
>>1566372Потому что у языка такие правила, блеать. Не нравится - пили обёртку над указателями со своей собственной арифметикой, раз так хочется выстрелить себе в ногу.
>>1566400Я не знаю какой там античит. Гугл не блещет точной информацией. Могу только предположить, что там какой-то lifeguard. Но и могу предположить, что он был когда-то в игре, а сейчас его нет, ибо их сайт куда-то там переехал и, вроде как, не занимается защитой игр, судя по этой инфе https://liveguard-security.com/allods-online/?_vlg=1 Короче, хз.>Для начала пронумеруй все глобальные обработчики и посмотри устанавливает ли игра свой.Т.е.? Как их пронумеровать и определить что там игра регистрирует/не регистрирует?Насчет драйвера, этот? https://github.com/oblitum/Interception Я бегло проглядел, мне не понравились картинки и я решил начать с хуков. Не хочу мешать все в кучу, ибо и с тем-и тем я дел не имел. Но попробую...
>>1566400Ну, вроде, поставил драйвер. Как с ним теперь связаться? Документации никакой не нашел, а та что на гитхабе, там просто какое-то лицензионное соглашение. Никаких других "геттинг стартед" не могу найти в гугле.
Сап, как распределить работу сокета в Qt, а именно слот readyread?У меня сначала в программу отсылается имя файла, а затем сам файл, но слот не понимает, как их обрабатыватьФайл передаётся частями, т.е несколько раз срабатывает readyreadКак разграничить загрузку файла и получение имени файла?Помогите, пожалуйста
>>1566429А, т.е. мне надо interception.h подключить и используя его функционал, методом тыка написать свое, скомпилировать и запустить?
Блядь, сейчас бы ебаться с подключением библиотеки... В чем проблема может быть?Вот мой код: https://pastebin.com/2zQtLempВот сам хидер interception.h: https://pastebin.com/NN4BdefjПапка с проектом:>пикКомпиляция с порта mingw:>g++ main.cpp -LC:\\Users\\Vladislav\\Desktop\\driver\\interception.lib -o dРезультат компиляции:>C:\Users\VLADIS~1\AppData\Local\Temp\cc8oTiHO.o:main.cpp:(.text+0xe): undefined reference to `interception_create_context'>C:\Users\VLADIS~1\AppData\Local\Temp\cc8oTiHO.o:main.cpp:(.text+0x1e): undefined reference to `interception_destroy_context'>collect2.exe: error: ld returned 1 exit status
>>1566512Засунул .lib и .dll сюда:>C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\libСкомпилировал:>g++ main.cpp -o d -linterceptionВроде, скомпилировалось все, но при попытке запуска d.exe появляется пик. Хз, либо я пишу хуйню (хотя, я и не писал особо ничего да и хз что писать, ибо документации никакой не могу найти), либо драйвер не может интерпретировать этот код. Хотя, когда качал драйвер, в папке samples все примеры работали. Правда, до сих пор мой капс сломан и я не могу его вернуть после запуска caps2esc.exe
Такой вопрос. Если мне нужно проверить указатель pX на то, что он указывает на какое-то значение, т.е. pX != nullptr, я обычно пишу так: if (!pX) {}Сейчас наткнулся на то, что опытные программисты используют вместо этого if (!!pX). Прочитал, что это тоже самое, что и pX != nullptr. Т.е. вроде как и !pX и !!pX означают одно и то же. Зачем два восклицательных знака?
>>1566518О, моя любимая ошибка номер "ноль хуй соси пять нулей семь блядей"https://www.youtube.com/watch?v=4E-hv74reEM
>>1566400>>1566534Написал что смог понять, возможно, там вообще бред, но я хз как можно вслепую писать, не имея базы знаний в этой области/опыта. Документации найти не смог.Код с монологом о размышлениях: https://pastebin.com/yjs61ES4Требуется помощь.
>>1566556Бля, я слепой. Нашел документацию http://www.oblita.com/interception Но один хер, нахуя так прятать? В readme было сложно добавить ссылку? Завтра уже почитаю.
>>1566605Что-то проще совсем не стало... Документация крайне нулевая, инфы мало. Вообще не понимаю как зациклить нажатие клавиши... Вот, как я понимаю, в цикле while мы блочим проверку условия строчкой >device = interception_wait(context), пока по заданным фильтрам не придет нужное состояние>INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UPДопустим, я нажимаю кнопку, срабатывает KEY_DOWN, функция interception_receive что-то там возвращает > 0, после чего оказываемся в теле цикла, где устанавливаем нужную клавишу и посылаем ее драйверу. Перед отправкой у клавиши всегда состояниеDOWN или UP, что по идее должно триггерить функцию interception_receive автоматически, зацикливая, но этого не происходит. А так же не понятно, что делают остальные фильтрыINTERCEPTION_FILTER_KEY_NONE,INTERCEPTION_FILTER_KEY_ALL,INTERCEPTION_FILTER_KEY_E0,INTERCEPTION_FILTER_KEY_E1,INTERCEPTION_FILTER_KEY_TERMSRV_SET_LED,INTERCEPTION_FILTER_KEY_TERMSRV_SHADOW,INTERCEPTION_FILTER_KEY_TERMSRV_VKPACKET Но я и с ними пробовал, не работает. Работал с кодом из примера https://pastebin.com/WjjhERiS
По MSVS C++CLI вопрос.Я правильно понимаю, что Application::StartupPath появляется генерируется уже на этапе выполнения и мне в строку подключения к бд соответственно надо задавать в обработчике Form1Load?Программа находит бд и работает, а конструктор ругается на исключение, когда я пытаюсь исправить строку подключения oledb внутри метода InitializeComponent формы.В книжке нет полного кода, но как я понял, он задает статический путь в свойствах компонента на форме, а в коде уже в обработчике меняет строку подключения.
Вот хочу решить. Есть у меня интерфейс MySubsystem.Пользователь наследуется от него (класс Fu)При этом мне неизвестно количество и тип аргументов в конструкторе пользовательского класса Fu. То есть я не могу написать базовый констуктор в MySubsystem на все случаи жизни.Теперь что я хочу. Я хочу запретить прямой вызов констуктора Fu f(10), потому что оно ведет к ошибкам.Как сделать?Чтобы можно было производный от MySubsystem класс вызывать только так Fu::Create(10), независимо от того как описан констуктор в производном классеДа, можно в классе Fu - Fu(int ni) сделать приватным, но это плохое решение, потому что этот Fu будет писать другой человек, а значит он конечно же забудет об этом нюансе и сделает его публичным
Может есть сайты которые в "идеальных условиях" прогонят мою программу с нужными мне входными данными раз 100 и выдадут среднее время исполнения?
>>1567062если написать так:protected: MySubsystem() = default;то это ничего не даст, потому что у Fu свой констуктор (Fu(int)).И нельзя написать protected: MySubsystem(int) = default;потому что MySubsystem не должен знать какие аргументы будут у пользовательского класса. Там может быть int/string или стопятсот классов - вся фишка тут именно в том что у Fu может быть любые аргументы
>>1567047Добавь проверку в конструкторе, если один аргумент и он равен 10, то возвращай пустой класс.мимо диванный
>>1567073> И нельзя написать protected: MySubsystem(int) = default;На самом деле ты можешь написать шаблонный конструктор, по аналогии с методом Create.А вообще, подумай хорошенько, потому что выглядит как очередной велосипед. Что сделать-то хочешь?
>>1567092>>На самом деле ты можешь написать шаблонный конструкторнет. потому что повторю - MySubsystem не должен знать о количестве аргументов его наследников. И у каждого наследника своя логика в конструкторе>>что выглядит как очередной велосипедВелосипед чего?>>Что сделать-то хочешь? Вот больше кода https://ideone.com/dTXvd9В чем фишка? В коде есть основные системы которые за что-то отвечают - менеджеры(Foo1, Foo2, Foo3). В этом примере эти системы создаются в одном экземпляре - похоже на синглтон (но в реальном проекте Subsystem подключается к Context, и этих контекстов может быть также много, так что ни синглтон, ни тем более глобальные переменные тут не подойдут)Далее я хочу получать доступ к этим системам через GetSubsystem(). (GetSubsystem<Foo1>())GetSubsystem() должен выдавать мне объект класса из текущего контекста.Subsystem - это просто базовый интерфейс который задает базовое поведение системы и ее привязку к контексту. Чтобы не копипасить кучу кода инициализации.При этом - этот код - библиотечный, то есть я не знаю сколько будет этих классов Foo. Какие у этих классов будут аргументы и т.д.Код уже работает, но есть архитектурные проблемы:- пользователь этого кода может не читать документацию и вызвать коструктор вручную (а не через Create()) - это ошибка.- (хотелось бы что-то сделать чтобы не писать вручную все эти Destroy() - но идей пока нет)Еще раз повторю - почему не сделать тупо все это в конструкторах - потому что слишком дохрена копипасты, и потом - этот констуктор надо где-то вызвать, то есть надо где-то создать переменную, как-то ее привязать к текущему контексту чтобы память не потекла... короче такое решение хреновое.
>>1567130ну или так постараюсь объяснить:- есть контексты (context). в любой момент времени активен только один контекст (но он может передать активность другому)- к этим контекстам привязаны подсистемы (subsystem)- подсистемы должны быть правильно инициализованы. Отложенная инициализация по вызову не пойдет - подсистемы должны инициализироваться при старте, а не при первом вызове (потому что там тяжелый код чтобы его во время основной работы вызывать)- и да, подсистемы могут не проинициализоваться - но это не является ошибкой (и тем более не исключение) - то есть даже при неиницилизированной одной системе всё остальное должно работать (кроме доступа к этой системе)- в любом месте кода должен быть доступ к нужной подсистеме активного контекста (GetSubsystem())... При этом я должен получить доступ только к самой подсистеме, а не всем системам что есть (это уже будет узел в лапше - не надо такого)- должна быть возможность добавлять произвольное количество подсистем. Интерфейс подсистемы по всем законам ООП не должен знать ничего о том кем будут его наследники.
>>1567130Сложно запретить пользователю создавать объект, если он конструктор объявил public.Можно попробовать передавать первым параметром в конструктор Subsystem какой-нибудь объект-пустышку, которую пользователь не может создать, но тогда ему нужно будет прописывать в конструктор какой-то левый параметр, иначе сам не сможешь создать.Проще писать в доках, чтобы руками не создавали или делали конструктор protected
Бомжур, бандитыКто тут объяснит, по какой такой причине методы, определённые внутри тела класса автоматически становятся inline?Моя версия: чтобы не было их потенциальных переопределений в разных транслейт-юнитах. Насколько я прав по 10-ибальной шкале?
>>1567306Тут есть нюанс: не обязательно эти методы будут встраиваться. Это будет зависеть от настроек компилятора. На этапе линковки уже может либо произойти встраивание, либо просто линкер выкинет все определения этого метода из единиц трансляции, оставив только одно.
>>1567359Если обобщать то для членов-функций действуют те же правила, что и для свободных функций. Ты можешь в .h файле разместить определение свободной функции, пометив его inline. В зависимости от настроек компилятора будет сделано либо встраивание этой функции, либо на этапе линковки выкинутся все определения за исключением одного единственного.
>>1563540"срезы" строк - std::string имеет доступ по индексу и функцию-член substrно вообще то std::string - контейнер, предполагается работа с ним через итераторы и алгоритмы стандартной библиотеки шаблонов
Аноны, как будем добиваться больших зарплат для байтоёбства? Почему шарписты получают в среднем больше?
>>1567621Надо везде писать какое кресты сложное говно и продвигать для обучения в вузах питон. Меньше крестовиков - больше спрос - больше зп.
>>1567789> Надо везде писать какое кресты сложное говно и продвигать для обучения в вузах питон. Меньше крестовиков - больше спрос - больше зп.Больше вкатывальщиков в говноязыки - меньше ЗП в говноязыках - больше специалистов с опытом перекатываются в плюсы - меньше ЗП у существующих специалистов
>>1567871Я просто в инете почти не нашел инфы по этому поводу. Меня главным образом волнует как получать информацию о модельках и как их отрисовывать
>>1566372Наверное тебе в ПТУ сказали, что сложение указателя с числом это прибавление к адресу числа*(размер указываемого типа), поэтому ты думаешь что разность между указателями должна быть определена как разность между адресами.Но в ПТУ тебе напиздели про то, что такое сложение указателя с числом.
>>1567952Он сработает если в игре есть игра по локальной сети. В моем случае в игре мультмплеера нет ни в каком виде.
Лол, думал щас libpng прикручу быстренько, чтобы картиночку сохранить, а у там них обработка ошибок при помощи setjmp блядь! Наркоманы ебучие. Так и представил, как я щас посреди всей хипстоты с эксепшенами и смартпоинтерами ебашу setjmp.
>>1567860Сложно и трудоёмко. Проблема в том, что надо как-то портировать логику сингловой игры на сервак. Обычно юзают один из трех подходов:1. тупая трансляция, либо вообще p2p - клиенты договариваются между собой, вся логика работает на них самих. Открывает путь читерству, но работы намного меньше.2. (частично) эмулировать логику клиентов на серваке - трудоемко, надо много реверсить и отлаживать. Будет много багов и несоответствий.3. Гонять несколько клиентов на серваке/серваках, по одному на одного игрока в матче. Работы меньше, эмулировать ничего не надо, читерить сложней, но мощностей надо дохуя.Общий принцип такой1. реверсишь игру, находишь что надо хукать и дёргать, чтоб ей управлять2. пишешь клиентскую часть, которая берет под полный контроль процесс игры и коммуницирует с сервером3. пишешь серверную часть, одним из трех подходов выше.
>>1567968Можешь считать, что это невозможно. Настолько, что будет проще ремейк игры написать, мне кажется, если это старая стратегия.
>>1567984Спасибо за ответ. Мне кажется напиание сервера не самая сложная задача. Для меня сейчас выглядит непонятным как, например отрисовать человека. Вот я получил от клиента сообщение о том, что он хочет заспавнить на таком месте такого юнита. Как мне это сделать? Потом же эти юниты должны взаимодействовать с моими. По сути клиент берет на себя задачи, которые обычно делает бот. Похоже на модоелсто. Где взять инфу по этому поводу? Хотелось бы на примере увидеть работу
>>1568010>Мне кажется напиание сервера не самая сложная задача.Как раз написание сервера и реверсинг игры это самая трудоёмкая задача. Хукать игру много ума не надо.>Вот я получил от клиента сообщение о том, что он хочет заспавнить на таком месте такого юнита. Как мне это сделать?Надо пользоваться логикой самой игры и дёргать её когда тебе надо. Отреверсить игру (читэнжином, отладчиком, дизассемблером и т.п., туториалов миллион, в основном на читерских сайтах, как правило динамический анализ и проход по структурам будет быстрей дизассемблинга), и найти внутри неё стабильный адрес (или сигнатуру) функции спавна юнита. Это делается сложнее чем кажется, ибо надо 100% убедиться что это именно функция спавна юнита, это может быть совсем не очевидно. Затем внедрить код клиента внутрь процесса игры (техник миллион), и вызывать эту функцию когда тебе надо. Это уже дело техники. На самом деле всё зависит от устройства конкретной игры, там может быть не функция спавна, а надо произвести кучу действий, или еще что-то сделать. Также можешь зайти в asm-тред.
>>1568010В дополнение к написанному>Хотелось бы на примере увидеть работуПосмотри код MTA:SA, например.
Наконец закончил делать сапер. На все про все ушло меньше 300 строк. Хотя вышел лютый говнокод, вся программа разместилась в классе mainwindow. Буду теперь приводить к удобоваримому виду.по началу хотел сделать, чтобы мины генерировались так, чтобы не было возможности зайти в тупик, но это слишком сложно
Анон, у меня к тебе сейчас три очень серьёзных вопроса:Когда я пишуcout << "huj";, компилятор автоматически создаёт массив, в котором последовательно содержатся коды символов h, u и j? Или нет?Когда я пишут cout << this << "huj";, компилятор выводит адрес самого первого символа строки?Адрес чего выводится, когда я пишуcout << this;?
>>1568657а что тебе ответить, когда ты вообще полную абсолютную хуйню несешь? Тебе надо не вопросы задавать, а книги читать.
>>1568663Сам и читай, а потом расскажешь, как там случай на картинке объясняется, у тебя же дохуя свободного времени. А я чисто поинтересоваться зашёл, а не книги твои дурацкие читать.
>>1568635Фигня в кавычках - строковый литерал. Это область памяти только для чтения, считай, что это тип const char*.>cout << this << "huj";Оно выведет адрес объекта, в методе которого написано такое (в виде 0x1234) и после него допишет huj.>cout << this;>адрес объекта, в методе которого написано такоеСовет про книгу хороший. Проблема не в том, что ты не понимаешь конкретно этого, а в отсутствии общего понимания что тут происходит - по крайне мере так оно выглядит судя по вопросу. С сотворением общей картины поможет только книга, а ответы на вырванные из контекста вопросы тут лишь навредят.
>>1568674Ты не понял, мне вообще эти твои книжки не нужны. Когда каникулы закончатся и пройдёт сессия, я просто спрошу у препода, который мне всё это разжуёт и в рот положит. Если, конечно, мне тут то же самое не сделают раньше того времени. Вопрос этот для меня не столь критичный, так что отвечать или нет — твоя воля.
>>1568678>Анон, у меня к тебе сейчас три очень серьёзных вопроса:>Вопрос этот для меня не столь критичный
>>1568703Мне это просто внезапно стало интересно, но незнание всего этого мне прямо сейчас никак не помешает. Хотя хотелось бы, чтобы анон просто по-человечески по каждому пункту ответил хотя бы парой слов по теме, а не ссылался на какие-то там книги. Это же тред для обсуждения языка, а не тред ссылания на литературу по каждому вопросу. Ну неужели там так долго надо объяснять?
>>1568715Да, блядь, это фундаментальные особенности языка.Если ты не хочешь это понимать и читать книгу - то съёбывай из своей шараги в поварское училище и пеки кексы.Хотя там тоже желательно книги с рецептами читать.
>>1568870У меня душа лежит к выпеканию аж пиздец, только после нового года дважды выпекал охуенные овсяные печеньки, которые похвалила вся моя родня и какой-то знакомый моей мамки. Но в наше городское поварское училище был конкурс из дохуя двоечников на одно место, так что чтобы дома как сыч не сидеть и не сойти с ума от одиночества, пришлось поступить в универ учиться печь говнокод. Ты прям пиздец угадал мои основные интересы.
>>1568870Зато смотри какой я умненький пекарь оказался, всего за один вечер вникнув в суть только лишь односвязных списков, забил на чтение кода двусвязного списка тутhttps://pro-prof.com/forums/topic/реализация-связных-списков-на-си запилил свой собственный двусвязный список. И это работает!https://ideone.com/xGYgo4Оценишь? Мне не помешает мнение более опытного проградриста.
>>1568886И да, конечно же я попросил сравнить мой код с кодом с сайта, чтобы увидеть здесь в мой адрес что-то вроде "малаца, хорошо сделал" и потешить своё ЧСВ.
>>1568890Теперь поменяй int на какой-нибудь char[8192], сделай функцию, которая внутри себя создаёт список из миллиона-двух элементов и вызови ее несколько раз.А потом расскажешь, что нагуглил, чтобы исправить.Ебать как я люблю названия переменных.
>>1568926Да ладно нормальные названия. Даже с префиксами по кодстайлу, кек.Нормальная лаба, я бы сказал. Ни к чему не приебаться, кроме того что память течет.нахуй ты в ideone джаву выбрал-то? Main.java:1: error: illegal character: '#' #include <iostream>
>>1561322Сигнатура одна - передавать базовый Event. Потом двойным диспачингом находишь правильный обработчик своего эвента.
>>1569022Да, я нашел один, правда так и не пробовал. Ещё есть либа DevIL, вроде неплохая. Но я в итоге сделал через виндовское апиhttps://docs.microsoft.com/en-us/windows/win32/wic/png-format-overview
Сап, где можно потренироваться с STL? Ну типо задачи под него заточенные. А то так получается что могу реализовать свой стек/очередь, но про встроенные вечно забываю.
>>1569094Самое простое: в тот момент, когда тебе нужно что-то сделать хитрое, подумай: "а нет ли этого в STL?" и иди курить cppreference.com или cplusplus.com.Скорее всего ты найдешь там ответ на свой вопрос.А так - можешь cookbook от Яна Галовица прочесть. Там не всё разобрано, конечно же, но примеры полезные есть.Например, что мне доставило, перенаправление cout в файл в нужной области видимости.
>>1569387Почитай за деструкторы, там найдешь объяснение, почему может течь память и как это исправить.
Подскажите, чому я не вижу проперти checked у QPushButton-а? Не могу на него сослаться, ругается, что нет такого свойства. Хотя оно должно быть, т.к. QPushButton наследует у QAbstractButton-а.
>>1569925Хочу сделать массив с состояниями кнопок.Пишу что то типа buttonsState->append(&button->checked)а он мне говорит, что у button нет свойства checked.
>>1569942Ты хочешь хранить у себя указатели/ссылки на свойство, чтобы потом его можно было читать/менять?Они же для того и придумывались, чтобы ты этого сделать не мог.Если уж так хочется, храни коллбеки на метод isChecked...
>>1570030Можно конечно, но не так, как ты это хочешь делать.Есть методы is и set, вот их и дёргай, иначе всё сломается к хуям
>>1570036Спасибо за инфу. Я нашел способ получше. Оказывается в Qt есть специальный класс QButtonsGroup, сунул кнопки туда, все работает.
недавно понял что каким-то образом Qt и др идэ как-то понимают как собрать проект из нескольких cpp файлов, и как-то так у них получается не нарушать поля видимости.
>>1570694Что по-твоему сложного в вызове компилятора для каждого из файлов?> как-то так у них получается не нарушать поля видимости.За этим должен следить ты, а не компилятор
Как делать тесты в Visual Studio 2017? Кое-как разобрался с Google Test, но обозреватель тестов даже не видит мой тест.
Анон, мне надо, чтобы кто-то проверил мою лабу на предмет утечки/неутечки памяти.https://ideone.com/FoO2OYПроверишь? Это линейный двусвязный список.
>>1570977Таки при завершении времени жизни самого списка его узлы не удаляются. Надо в деструктор запилить цикл для очистки. ~spisok(){ while (u_golova) { uzel* u = u_golova; u_golova = u_golova->u_sled; delete u; }}
>>1571014Я читал где-то, что если деструктор пустой, то компилятор сам разберётся, что там удалять/освобождать. Это не так?
>>1571020Ты о чем вообще? Или таблетки опять забыл выпить?>>1571021Тогда сорян, с деструктором верно.>>1571025Детектор нужен, простыми словами, если где-то есть динамически выделенная память, иначе все ок.Или если необходима какая-то особенная логика, чекни std::shared_ptr.
Есть ли разница междуComplex operator + (Complex const &obj);иComplex operator + (const Complex &obj);?Если есть, то какая
>>1571146Детектор моего скудоумия, так как я и не понял анона, который на меня наехал, и набрать нужное слово не смог.Деструктор, конечно же.>>1571020>а ты тут только про хуи пишешь.Так сказано же>Лабы идут нахуйПотому я тебе хочу не сразу все рассказать и помочь, а направить на нужную мысль.
>>1571159Т.е. деструктор это просто функция по сути, реализовывать тебе ее самому чтобы очистить память, если сам выделял, так?
>>1571175Да, это функция, которая будет вызываться при выходе из области видимости(можно и руками, но я не знаю, когда это в самом деле может потребоваться).То есть для class C{C() = default;~C(){std::cout << "\ndtor";}};int main(){{C c;//Тут будет вызван деструктор}std::cout << "\nend";return 0;}Вывод будетdtorendХотя деструктор ты руками не звал.И да, если ты для переменной внутри класса выделил память через new - то ее нужно освободить через delete.
>>1571203Все, я понял, спасибо. Так-то я читал о деструкторах, но не помню, чтобы именно эту особенность упоминали, а она ведь ключевая.
>>1571219На cppquiz много вопросов, каким-либо образом связанных с деструкторами.Да и вообще полезная штука, мне помогло в какой-то момент.
>>1552778 (OP)Есть одна йоба, с большим количеством пф алгоритмов и им подобных. И в определенных ситуациях она подлагивает пк, а точнее инпут - мышь подвисает, что сразу чувствуется. Как это работает? Почему? Общая нагрузка на цпу низкая, сторонние процессы вроде браузера, звука не виснут, лагает именно мышь.
>>1571251А это как с билетами ГИБДД.Сначала отвечаешь неправильно на 80%, читаешь верные ответы и через некоторое время уже проходишь на 100% все тесты.
В чем смысл итераторов? Зачем методы векторов принимают в качестве аргумента итераторы, а не номера элементов?
Научите пользоваться перегрузками.https://ideone.com/0lsJfFВот есть условный класс, я описал там какие-то конструкторы и операторы присваивания и хочу перегрузить операцию сложения.Но вместо того, чтобы работать эквивалентно функции add, перегрузка создаёт временный A по адресу +28 (и соответственно память выделяется под 4 объекта вместо трёх) и вызывает оператор присваивания.Рука тянется написать, A& operator+(...), но я не могу написать в теле функции A temp, а потом прописать return temp для такого случая. И я не могу писать this->arr=... ; return *this; - потому что такое изменит одно из слагаемых.Работает как функция add, только если написать сразу A a=b+c, но такое не подходит, если у меня уже есть три объекта с выделенной памятью.Я полистал книжки, но там обычно лишь вскользь упоминают перегрузки, мол работает, а то что создаётся лишний временный объект волновать меня не должно.>>1571321Чтобы был одинаковый интерфейс для векторов, списков и деревьев, которые не умеют в обход через номера элементов, ежжи?
>>1571332Тащемта operator+ надо делать через временный объект и operator+=, внутри которого ты будешь изменять объект класса, от которого вызываешь метод.А operator+ и должен возвращать временный объект.Об этом есть глава целая в "Объектно-ориентированное программирование на C++".
>>1571339>и должен возвращать временный объектЗачем такое нужно тогда, если оно просто ради красивого внешнего вида создаёт временные объекты, когда мне нужно всего лишь a=b+c поменять на add(a,b,c).Я более-менее понимаю почему так сделано, но это тупо что ли как-то, хотелось бы немного другого. Угу, можно написать a=b;a+=c; - в таком случае временный объект не создаётся, но зато вызывается оператор присваивания и это выглядит намного паршивее, чем a=b+c и даже чем add(a,b,c). И ещё при a=b;a+=с; Ячейки по два раза перезаписываются - add(a,b,c) выполняется за 103.2, a=b+c с четвёртым объектом за 164.0, а a=b;a+=c; за 153.9, лишь немного лучше временного объекта. Числа плавают лишь на +-5 при множественных проходах. Красивая запись явно не стоит увеличения времени выполнения на 50% с -O3 на первом попавшемся примере.Угу, прочитаю твою главу, но пока что пролистал и нужного мне синтаксического сахара там не обнаружено.>>1571344Зачем там noexcept, если я не использую нигде исключения, и не использую стандартную библиотеку или ещё что-то?https://ideone.com/71jojy - так лучше, теперь доволен? Я даже мейну поставил noexcept.Пиздец это исключения и то что мне ко всем функциям надо noexcept прописывать, хотя должно было быть наоборот, то что к функциям с исключением нужно прописывать except, а все остальные по умолчанию считаются noexcept. Больные ублюдки.
Зачем нужны геттеры и сеттеры, если переменные в поле видимости всего класса можно сделать приватными, а в публичной части просто вызывать их из функций? Тогда ведь в маин через точку будут видны только функции в паблике.
Вот здесь, например, по идее вообще можно без GetName обойтись, строка name и так будет видна для SetName.
>>1571351У тебя оператор присваивания вызывается и в случае a = b + c, и в случае a = b; a+=c.>Зачем временный объектА как ты себе представляешь колбасу из a = b + c + d + e + f?Ты уверен, что во всех абсолютно случаях разница во времени будет такая же? Это у тебя такой класс, в случае другого класса значения могут совсем по-другому отличаться.Ты в дебаге проверяешь время работы? Если да - то молодец, ага.>noexceptЗатем. Компилятор для реализации перемещения должен быть уверен, что конструктор не выкинет исключение. А если ты не указываешь это явно, проверять он не обязан.>НаоборотТы оптимистичен, компилятор и комитет - пессимистичен. Тебя потом набутылят за ущерб компании в случае багованного кода, а им спасибо скажут: "ух как предусмотрели, мы это ещё на стадии компила/тестирования отловили!"Да и слово except в C++20 вроде как deprecated будет.
>>1571383Ну если тебе не надо читать переменные-члены класса - то пожалуйста, не делай для них геттеры.
>>1571395>как ты себе представляешь колбасуИ то верно. Сказать как особый случай, особую оптимизацию для случая из двух слагаемых язык не поворачивается. Ну и ладно, не очень то и хотелось.Написал же, что с -O3.Лучше бы слово try deprecated стало - бесполезная концепция и вроде как не только я её избегаю.
>>1571456Да, ты прав. Я проебал момент, что либы не используются, тогда -O3 в дебаге будут те же, что в релизе, сорян.>tryНу хуй знает, кто-то активно обрабатывает так исключения, кто-то нет.
>>1571382Но ведь ты только что и описал геттер.>>1571384Тебе где-то в программе например нужно просто получить значение из поля класса, ты же не каждый раз его задаешь.
>>1571456>я её избегаюНу и напрасно. Если эксепшенами не пользоваться, то можно сразу половину языка депрекейтить. C++ без них вообще слабо раскрывается.
>>1571321В том, что это гораздо более мощная концепция, чем какой то номер элемента. На какой номер элемента по твоему указывает итератор создаваемый back_inserter ом?
>>1571841this.>>1571321Посмотри вообще на шаблонный класс итератора, на type_traits. В отличие от указателя ты куда больше инфы из итератора можешь вытянуть.
>>1571841back_inserter наряду с хуевой тучей других inserter-ов - просто костыли для обхода соглашения, что алгоритмы из стандартной либы не могут изменять размер контейнера. Соглашения, которое сделал сам комитет, а потом такой "бля а как нормально коллекции тогда юзать? На нах вам инсертеры", и это все при том, что в ассоциативных контейнерах число элементов уже может изменяться. Весело пиздец, хочу чтобы стратусрус стал моим дилером
>>1571930У тебя очень поверхностное мышление. Итераторы вообще не обязаны быть связаны с контейнерами.
>>1568667>>1568669>spisok>golova>etot>uzel>stek>...>А я чисто поинтересоваться зашёл, а не книги твои дурацкие читать. Тред 1С-параши дальше по коридору, уебок.
Умоляю. Как оптимально получить все сочетания? Время 4 утра нахуй. У меня tl на задаче. Нагуглить не могу решение. Дайте где почитать прошу
>>1572314http://rosettacode.org/wiki/Combinations#Cоткапал такое решение. Оно точно самое оптимальное?
>>1571959>Итераторы вообще не обязаны быть связаны с контейнерами.итераторы ввода-выводаитераторы регулярок и итераторы токенов регуляровеще что-то?
У меня есть переменная int a = new int* [];Я хочу передать в функцию не весь массив, а только указатель на него. В аргументе я должен указать тот же тип, что и a, ведь a не сам массив, а только указатель на него и в любом случае передается указатель. Верно?
>>1572573Почему ты пишешь way->, если way не указатель?И почему твоя среда не исправляет это? У меня сама (по нажатию какой-то клавиши) исправляет точки на -> и наоборот, если я опечатался.
>>1572579Я не знаю, наверное потому что у тебя мусор вместо ide.У меня работают оба варианта, если указать корректную ./-> и корректный тип в push_back.
>>1572587Но это не ответ же.Код бы весь показал, вдруг у тебя на первой строчке что-то не то написано. Он у тебя жалуется на ошибку в пятой строчке, но это же дичь какая-то? Если бы там не было using namespace, то он всё-равно должен был бы другую ошибку указать. И даже если бы ты переопределил тип vector - даже тогда он жалуется на то что это не шаблонный тип, а не на < и >.
>>1572598Угу, ну ты и тип, лол. До переноса оно писало: no template named 'vector'После переноса остаётся только предупреждение, что FindInTree не возвращает return.
>>1572600Еще вопрос. Не могу передать graph в функцию. Говорит чтение из недоступной памяти. Заранее большое спасибо
Аноны, как вкатиться? Хочу выучить основы и поюзать на практике. Что можно начать делать чтобы постепенно поднять лвл до джуна, например? Стоит ли пилить какой-то проект или лучше задрочить книжки и решать тамошние задачки?
У меня рекурсивная функция поиска пути в дереве. В какой то момент путь найден. Как завершить все рекурсии что бы они не выполнялись?
>>1572547А массив твой типа можно? Используй вектор тогда.span - это обёртка над указателем, почитай cpp core guidelines
>>1572679> А массив твой типа можно?Почему нет?> Используй вектор тогда.Использую почти всегда, но тут мне кажетсч будет быстрее массив, тк очень много обращений к его элементам> span - это обёртка над указателем, почитай cpp core guidelinesПрочту
>>1572689>будет быстрее массив, тк очень много обращений к его элементамА есть разница какая-то с вектором? В обоих случаях ты прибавляешь смещение и обращаешься по указателю.У тебя там int✲✲ ? Лучшее что можно сделать, это заменить его на int✲, и обращаться как a[y✲dx+x], чтобы было только одно разыменование (и чтобы все данные лежали в одном месте и хорошо умещались в кеш), но это работает только в случае прямоугольных массивов, естественно.>>1572532>В аргументе я должен указать тот же тип, что и aКонечно, int✲✲.
>>1572689> Использую почти всегда, но тут мне кажетсч будет быстрее массив, тк очень много обращений к его элементамТвоё "кажется" ничего не стоит, пока сам не проверишь. От результатов можно охуеть, даже если написать так, как анон выше (через одномерный массив). Советую посмотреть доклад Александреску, вроде называется "speed is found in minds of people"
>>1572679>span - это обёртка над указателеНа массивом же, чтобы знать его размер и например делать рейндж фор
анончики, помогите, молю Решить задачу для динамического массива, не используяиндексацию. Найти сумму нечетных элементов, стоящих нанечетных местах (то есть имеющих нечетные номера). Вывестиадрес максимального элемента исходного массива.Максимально не понял это задание. На вас вся надежда
>>1572776>не используя индексациюЯ тоже не понял что это значит. Использовать *(a+i) вместо a, лол? Но это же смешно просто. Я бы написал с индексацией, так бы принёс и потом спросил бы что тут подразумевалось.
>>1572776Если это глупое задание от консервативного дядьки, то я бы вот такую дичь нахуевертил бы, пусть подавится: https://ideone.com/PySw0c
Что вы думаете об этом курсе, читать не умеюhttps://www.udemy.com/course/beginning-c-plus-plus-programming/
Помогите с qt. Надо расположить кнопки вплотную, но layout даже при указании spacing 0 делает видимое расстояние
>>1573147Пружинку вставить чтобы сжимала их?>>1572987Какие то азы судя по оглавлению, можно в любой книжке для начинающих прочесть имхо.
В статье на хабре (https://habr.com/ru/post/64280/) про виртуальные деструкторы было написано, что если у меня есть виртуальный метод, но деструктор при этом не виртуальный, то происходит утечка памяти.Можно прояснить вот этот момент?То есть вот в этом коде(https://ideone.com/4GTp1H) будет утечка памяти? За счёт чего? Какое неявное действие должен был сделать виртуальный деструктор, который его не сделает? Я просто вызываю два пустых конструктора и потом один пустой деструктор для одного и того же адреса.Я понимаю зачем нужен виртуальный деструктор когда в каком-то из наследников если я дополнительно динамически выделяю память или ещё чем-то подобным, но если я просто переопределяю методы - ничего не произойдёт же?
>>1573545> Какое неявное действие должен был сделать виртуальный деструктор, который его не сделает?Вызвать деструктор наследника вместо деструктора родителя
>>1573545Да даже без динамического выделения памяти.В родительском классе у тебя одно поле, в дочернем - два.Без виртуального деструктора при*parent x = new child;x.~parent();будет вызван деструктор родительского класса. Память под сколько полей он освободит?
>>1573574Что поменяется, если он не вызовет деструктор?>>1573578Ничего не понял по правда говоря. Деструктор не освобождает память, деструктор это лишь дополнительный код, который выполняется перед освобождением памяти, разве не так?Каких полей? У меня две структуры на 8 байт, где есть только один неявный указатель размером в 8 байт на таблицу виртуальных методов. Если интерпретировать эти 8 байт как указатель - то в нём одинаковое значение даже.А если перегрузить new и delete, то можно увидеть, что операция выделения и очищения памяти вызывается для одного и того же адреса, неважно указывает ли указатель на A, B или void. Только что в первом случае вызывается 1 деструктор, а в третьем ни одного (и вызывается другой delete, который без указания размера). При этом память была освобождена во всех случаях, даже когда нет возможности вызвать деструктор, потому что тип - void*.https://ideone.com/jlU7b0
>>1573607> Деструктор не освобождает память, деструктор это лишь дополнительный код, который выполняется перед освобождением памятиЭто ты сам придумал или подсказал кто?
>>1573625Интуиция подтверждаемая выводом программы со второго идеона.Если бы он освобождал память, то ручной вызов деструкторов приводил бы время от времени к ошибкам, но вроде бы не приводит.Конструкторы и деструкторы - всего лишь синтаксический сахар же.https://godbolt.org/z/SPwxg3Если ты утверждаешь что это не так, то я предлагаю тебе вот тут показать что такого необходимого делает деструктор B, что его нельзя пропускать. Я не увидел ничего подозрительного, например, никаких дополнительных освобождений или выделений памяти. То есть в памяти есть две таблицы виртуальных методов для A и B, и одного указателя на одну из этих таблиц в экземпляре структуры более чем достаточно для полиморфной работы этих методов. Не вижу в каком месте деструктор или конструктор могут неявно выделять какую-либо ещё память.
>>1573658Но если ты не вызовешь деструктор унаследованного класса, то у тебя вытечет его состояние. Вдруг там был какой-нибудь unique_ptr?
>>1573773А, ну ты это и так понял. Вообще, ничего не произойдёт, потому что деструктор не работает с аллокацией/деаллокацией.
Может, так чуть понятнее станет.T ^ const ptr = new T(jopa);раскрывается примерно так:T ^const ptr = std::allocator<T>{}.allocate(1);new (ptr) T(jopa);delete ptr;превратится примерно в следующее:ptr->~T();std::allocator<T>{}.deallocate(ptr, 1);
>>1573773Очевидно, его нет, я только переопределяю код методов. Я же сразу сказал, что мне понятны ситуации когда виртуальный деструктор нужен, но не понятно почему пишут, что он нужен всегда если есть виртуальная функция.>>1573873Нет, с чего бы? Деструктор всего лишь неявно вызывается в конце области видимости или при вызове delete (и вызывает деструкторы для всех внутренних классов). Используется ли он для уничтожения объекта и освобождения памяти или нет - про это нет никаких гарантий, это всего лишь его предполагаемое использование. Вот (https://ideone.com/7vMN60) я использую деструктор как метод для печати всех элементов и почему-то объект не слишком уничтожается при вызове деструтора. А вот после delete, после этого он всё-таки перестаёт работать при первом же вызове add(0), потому что удаляет объект именно delete.
>>1573955Ещё один..Вот анон выше пояснил же, что деструктор это простой метод но со странным названием, и иногда вызывается автоматически. Всё.Он делает ровно то, что ты в нём напишешь. Нихуя не напишешь - нихуя не сделает.Алсо, вызовы деструкторов полей и "освобождение стековой памяти" (лол) происходят только один раз при завершении жизни объекта, и уже после того как его десктруктор выполнился.
>>1574082>деструктор это простой метод но со странным названиемвсе же у него есть специфика..виртуальные функции-члены внутри деструкторов не рекомендуется вызывать..исключения не должны выходить из деструкторов, деструктор всегда должен успешно отработать..
>>1574366Никак?У тебя последовательность байт на диске. Записаны байты с 1 по 9000. Ты хочешь вставить строку между 4000 и 4001 байтом, чтобы она занимала байты с 4000 по 4100. Какое устройство должно быть у диска или файловой системы, чтобы такая операция была допустима? Первую половину тебе перезаписывать не обязательно, но вот хвост в любом случае придётся. Никаких аппаратно поддерживаемых операций "всовывания" байтов между другими на нынешних дисках пока нету.
Как с помощью стритстрим считать из строки сначала строку до пробела, а потом число после пробела? Делал так, но соснулstd::istringstream df(string);df >> str;df >> numb;
>>1574280Из деструктора можно бросать и даже ловить. Если знаешь, что делаешь. А виртуальные функции и из конструктора не очень удобно вызывать, но это в силу особенностей реализации этих самых виртуальных функций.
>>1574563> виртуальные функции и из конструктора не очень удобно вызыватьЧто значит "неудобно"? Виртуальный вызов из конструктора ты не осуществишь
Аноны, сап, есть такой вопрос. Как объявить переменную? Нет, я знаю, что надо написать "int a;", и.. че? Где-то там выделилась память. Я понимаю, что я могу манипулировать с этим участком памяти через "a", но зачем мне это делать, когда я не знаю для чего мне эта переменная нужна? Я собираюсь записывать в эту переменную какие-то биты, ок, но для чего? Я себе это представляю так, что для начала мне нужно что-то сделать, а потом, когда мне нужно будет использовать память, я ее использую. Но тогда надо начинать с чего-то другого, верно? Но нельзя начать с чего-то другого, так как чего-то другое требует для манипуляции чего-то того, чего нет (переменной). Такой замкнутый круг. Как решать задачу в итоге?
>>1574623Если ты переменную объявил, это ещё не значит, что где-то там память выделилась. Твой поток сознания вообще непонятен.
>>1574623Охуеть философ.> Я себе это представляю так, что для начала мне нужно что-то сделать, а потом, когда мне нужно будет использовать память, я ее использую.Код обрабатывает данные. Нет переменных - нет данных. Нет данных - нет смысла писать код. "Что-то сделать", впрочем, можно: объявить пустую функцию ничего не принимающую и ничего не возвращающую, а затем её вызывать, сколько хочешь.
>>1574714>объявить пустую функцию ничего не принимающую и ничего не возвращающую, а затем её вызывать, сколько хочешь.Хм, интересное решение. Буду пока придерживаться этого варианта, если что пойдет не так или появится лучший - сообщу
>>1574779Если бы. У тебя там неявный int, так что данные уже есть, хоть и мусор. Перепиши хотя бы с void.О, ещё кое-что можно:- пустой оператор ';'- goto метка;
>>1574699Нет, дело даже не в этом. Если ты написал int a и больше ничего, то память не выделилась. Вообще нихуя не произошло! Это же объявление, блять, оно не генерирует никаких инструкций. Вообще, если ты о такой хуйне задумываешься, осваивай ассемблер. Там сразу станет ясно, кто такой стек, кто такая переменная, функция и прочие не очень понятные вещи.
>>1574892Вот кстати да. Те, кто первым языком учит какой-нибудь питухон, обычно остаются без полного понимания стека.
Анон, есть ли у тебя ширмавыстрел или ссылка с кодом программы на ассемблере, который на самом деле C или C++ с кучей define?
>>1575128Ну напиши тогда виртуальный вызов из конструктора, интересно посмотреть как ты вызываешь метод объекта, который еще не создан
>>1575145https://gcc.godbolt.org/z/9xx6HnНе берусь за чистоту эксперимента, может, там выоптимизировалось чего, но взять и вызвать получилось.> интересно посмотреть как ты вызываешь метод объекта, который еще не созданЧто значит создан? Память аллоцирована, просто вызывается конструктор, то есть this вполне себе живой указатель. В каком состоянии таблица виртуальных функций мне неизвестно, не знаю, что там в стандарте пишут. GCC, как видно, успевает с ней поработать до входа в тело конструктора.
Ку девсы, пишу сервак на плюсах. Он принимает от клиента сообщения и выполняет соответственный код. Принимаются сообщения в роде "ABC_CMD_0", "ABC_CMD_1" и тп. Как лучше парсить сообщения от клиента? Есть ли паттерны, чтоб решить эту задачу более разумно, а то не охота чекать руками if-ми, лмао.Thx.
>>1575214Блядь, так это и есть _не_ виртуальный вызов. Вот если бы у тебя конструктор базового класса вызвал метод наследника, тогда бы был виртуальный вызов.
>>1575267Что такое по твоим понятиям вообще "виртуальный вызов"? Это когда умный компилятор угадывает, что ты там захотел вызвать?
Привет, анон. Я студент, учусь на проградриста, второй курс. Мне кажется, я начинающий байтоёб. С этим нужно что-то делать?
Сап, подскажите пожалуйста как создать массив на 210^9 элементов?пробую так - вылетает, по другому тоже не получаетсяbool b = new bool[2000000002];delete[] b;
>>1575548Памяти-то хватает? У тебя так каждый bool занимает 1 байт. Вроде бы std::vector<bool> ужимает 8 штук в один байт, попробуй.
>>1575599А когда его это, того? Всё равно, поиграться с ним можно. Можно ещё и свой велосипед сделать, если это всё в учебных целях (очень вероятно).
>>1575548У меня твой код работает, кушает положенных 2 гб памяти без каких-либо подводных камней.Вектор действительно ещё в 8 раз ужимает.
>>1575621>>1575596попробую, спасибоДа, вузовское. Надо у отрезка закрашивать части, но больно границы поставили у него широкие, блин. я решил через false true в массиве закрашивать
>>1575625>закрашивать Если потом это нужно отрисовывать, то проверка каждого из 2 миллиардов кусков или, упаси боже, отрисовка миллиардов отдельных кусочков - очень плохие идеи.Храни отсортированые границы частей, по ним в любой момент можно собрать части разных цветов, так что если у тебя получится 30 сегментов, то 30 и нужно будет нарисовать, без цикла на 2 миллиарда.
Нужно написать класс, который бы содержал в себе таблицу рекордов игры. И записывал в файл ясен хуй. Я наговнокодил вот этоhttps://ideone.com/hcnwKW для каждого уровня сложности должно храниться не более 10 результатовМожно как то сделать по человечески?
>>1575632Понял, спасибоНе, там надо потом вывести длину закрашенного, думал пройтись где true счетчиком, хотя все равно бы сложности были, даже не учитывая миллиарды значений -_-
>>1575310Ну ты ведь понимаешь, что записьthis->VirtualMethod() в конструкторе базового класса эквивалентна записи this->MyBase::VirtualMethod ().Анон тебе верно про позднее связывание написал.
>>1575648Имей ввиду, что твоя программа будет в десятки тысяч ресурсозатратнее, чем того необходимо для алгоритма, и что она не заработает, если у тебя границы интервалов указываются как double и там какое-нибудь сложное дробное число будет.
Как сделать передачу звука по интернету? Как проигрывать частично переданный звук? Скорее всего передать просто фаул как звук не сложно. Как воспроизводить во время передачи?
>>1575666Ты разберись, что именно тебе нужно передавать. Ноты, волны или обрезанные чести песен в mp3/flac/ogg/etcПо последнему - режь какой-нибудь libmp3/libflac/etc и передавай целые файлики
>>1575660Конечно понимаю. Я не понимаю, какой смысл у слов "сделать виртуальный вызов из конструктора". Если это вызов метода, помеченного словом virtual (мы уже поняли, что нет), то всё уже разобрано. Тогда что это? Судя по словам "позднее связывание", я могу лишь догадываться, что это значит "вызвать метод, адрес которого станет известен после отработки всех конструкторов" в конструкторе, что, очевидно, само себе противоречит.Я говорю, что вызывать виртуальные функции в конструкторе может быть "неудобно", потому что человеку, не очень разбирающемуся в работе виртуальных методов, легко себя наебать -- он может подумать, что вызовется метод, определяемый в самом конце конструирования (как это обычно бывает), а не в процессе. На это анон мне отвечает, что "виртуальный вызов из конструктора сделать нельзя". Какой смысл в этом предложении?
>>1575786Что вы сретесь, вам Страуструп с Саттером в ccg русским английским языком написали что не надо юзать виртуальные методы в конструкторе, используйте фабричные функции.мимо
>>1574623>для начала мне нужно что-то сделать, а потом, когда мне нужно будет использовать память, я ее используюЛюбая программа - трансформация одних данных в другие. Нельзя просто "что-то сделать", тебе нужен direct object. Без данных нет и программы. Да и вообще >>>/ph/
Еще такой вопрос. Есть несколько классов, стоит ли создать один заголовочный файл и скинуть в него все инклюды, а в классах заинклюдить его?
Почему без указателя this-> элементы формы работают в обработчике события(Visual studio winforms)? В одной книжке было с this, в другой без, оба примера работают одинаково вроде.
>>1576392(*vec[x].begin())->...Begin возвращает итератор, через стрелку ты получаешь указатель.Равносильно твоему же> vec[x][0].SomeMethod()
Привет, анон. Подскажи мануал по Eclipse IDE 2019-12. Пытался написать в нем "Привет, мир!" на яве, но он выдаёт ошибки приклейтед (symbol "символнейм" could not be resolved). В онлайн компиляторе всё работает нормально, как заставить эклипс стакаться с явой 13.0.2?
>>1576523> на явеЧто? На яве? У тебя же крестовый код. На яве, если не ошибаюсь, тебе нужно создать класс и в нем сделать метод - и это будет минимальным ява-кодом.
Умоляю подскажите, можно ли как то реализовать через хук что бы нажатие кнопки Z нажимало Z один раз(!) как обычную кнопку и делало что то дополнительно на, например переменную меняло.В моем случае, когда я на хук Z делаю кейборд эвент Z - оно проспамливает в милисекунду несколько раз. Как мне отделить виртуальное нажатие кейбордэвента от реального физического?
>>1576590https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-keydownБит 30: The previous key stateНа него завязаться как-нибудь?
Перекот>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)
>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)
>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)>>1576737 (OP)
>>1554355>Однако "оптимизацией" подобные выкидывания, переписывания и упрощения - не являются.Однако являются рефакторингом. Если оптимизация нужна для того, чтобы компьютер быстрее справлялся с кодом, то рефакторинг нужен, чтобы с кодом быстрее справлялся человек.Мне кажется ты и близко не понял на что ответил.мимонуб, читавший листавший этот ваш рефакторинг и прочие чистые коды
>>1554724Упоминание эффекта Даннинга-Крюгера выявляет находящихся под ним ещё надёжнее.А всё потому, что впоследствии оказалось, что сами учёные подошли к исследованиям спустя рукава и впоследствии их исследование было пересмотрено и подвергнуто критике.