Вопрос по qt. Есть класс Mainwindow, в нем я создаю указатель на кнопку и в конструкторе класса делаю так > button1 = new QPushButton("Button", this); Но проблема в том, что кнопка не активна. Хотя если создать кнопку отдельно > QPushButton sd("df",&w); Где w экземпляр класса, всё будет работать. Почему?
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 слева, можно выбрать галочку запуск в терминале).
>>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.
>>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
>>1553489 Насколько легко? vector<string> s = stringstream("abc def ghi").split(" "); Справится хотя бы на таком уровне? Или нужно будет писать 20 строк и инклудить какие-то странные классы?
Почему раскрытие идёт корректно только внутри таких вот скобок, но не внутри 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))
Помогите, пожалуйста, составить программу или переделать мою, на кону стоит зачет по программированию и анальная девственность. Условие: Записать элементы массива 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_];"
Ананасы, поясните за аллокатор (кастомный). Вот, к примеру, он выделяет память кусками. А как быть есть подо "что-то" не хватит выделенного куска памяти. Например, текстура. Как быть тогда? Выделять несколько чанков под неё?
>>1554222 Так эта твоя операция навряд ли будет длиться долго, но суть не в этом. Покажи сигнатуру метода, потому что не совсем понятно, как класс должен строки складывать.
>>1554184 Сделай своё api для гуи. С кнопками, ползунками и надписями, чтобы все элементы интерфейса взаимодействовали друг с другом через виртуальные методы или ещё как и могли в нажатия мышкой, клавиш, колёсико.
>>1554184 ооп это парадигма для фабричного программирования, то есть бля берется проект в вакууме, описывается задание для старшего технаря, тот рисует облачки со стрелочками(ну вы знаете), отдает эти облачки со стрелочками младшим обезьянкам и следит за ними как они кодят.
все устроено так, что на каждом отдельном этапе ничего сложного нет и в общем то нехуй там дрочить. сложность(ну я бы сказал дефект ооп) в том, что когда ты рисуешь облачки со стрелочками, ты не можешь прочувствовать каждый оператор в каждом методе, ну это просто невозможно. по этому всегда будут костыли из-за недостаточной глубины продумки проекта на ранних этапах. так же невозможно предсказать все будущие правки проекта.
например тут писали про квадраты из прямоугольников. ну да это очень простой и наглядный пример. но бля задать прямоугольник можно несколькими способами https://gamedev.ru/terms/AABB .
когда вы думаете о машине, вы можете регулировать в своих мыслях глубину детализации или абстракции, то есть можете думать о машине но на самом деле в мыслях вы будете видеть только кузов с колесами, через момент можете по желанию открыть капот и представить некоторые детали двигателя, еще спустя один миг вы уже представляете 2Д иконку из эмодзи с машиной. но мозг нормального человека не способен одномоментно осознать всю машину как она есть и все условия эксплуатации этой машины.
ооп говорит, что машина наследуется от транспортного средства и реализует интерфейсы кресло, руль, педали и тд, что бы человек сел в нее и поехал. ну да все логично - так думают наивные новички и у них даже получается делать свои первые проекты. они думают, эй я уже надрочился и могу декомпозировать целые проекты прямо в классы, эй объекты в моих мыслях прямо как объекты в ооп - нихуя подобного. все это хуйня для даунов. некоторые настолько влюбляются в заведомо дефективное ооп, в парадигму, где одно изменение в проекте может понести за собой каскад правок по всему коду, что у них даже начинается ну ебаный бред я не знаю, это я про фанатов фабрик фабрик итд.
я работал с таким идиотом, ну фанатом uml облачек и архитектуро бреда. я просто брал его классы, переписывал и они получались короче либо вообще исчезали, так как мне нужна была причина это делать, я еще сверху дописывал фичи или находил баги. даже ебаное ооп я понимал лучше него. но он отплясывал перед менеджерами и руководителями, которые в свою очередь с большой вероятностью идиоты тоже, так что учиться надо отплясывать в первую очередь, а код писать не сложно.
>>1554251 >Возможно ли QTreeView сделать чтобы итем верхнего уровня имел 1 столбец, а его дети 2? Можно сделать, чтобы он отрисовывался на два столбца. Но надо писать свою модель. Посмотри, как у них Property Browser сделан.
>>1554331 >Все GUI фреймворки построены с использованием ООП Далеко не все, ImGui, например. А те, что написаны, начинали писаться в 90-е, когда ООП было модно. Например swing на джаве - образцовый пример, когда ООП только мешает. Там заебешься какую-нибудь кастомизацию делать, хотя ООП тут вроде должно помогать.
>>1554315 >напишите нормальный цикл. >ловите WM_KEYDOWN. И как это тебе поможет выйти из цикла, который с задержкой в 2 сек, быстрее ?
Зачем заморачиваться дополнительно ещё и ловлей из кучи совершенно не нужных сообщений нажатие на кнопку, с которым и так нету никаких проблем ? От того, что ты будешь разгребать все сообщения, в поисках нажатия, вместо того, чтобы взять готовое - ничего не поменяется.
Вот это решение >>1554308 скорее всего, оптимально.
>>1554334 Immediate Mode Gui (включая ImGui) фреймворки сделаны специально для игр и подобных им вещей, которые работают в непрерывном цикле "обновление состояния-отрисовка" (а не по типичной для десктопных приложений событийной модели). Они очень примитивные и ничего серьезного ты на них не сделаешь.
>Там заебешься какую-нибудь кастомизацию делать, хотя ООП тут вроде должно помогать. Без ООП ты еще больше заебешься при попытке написать что-то мало-мальски сложное.
>>1554348 > Они очень примитивные и ничего серьезного ты на них не сделаешь. Редактор Unity3d написан на immediate mode фреймворке. Это достаточно серьезно? >Без ООП ты еще больше заебешься при попытке написать что-то мало-мальски сложное Emacs, например, можно считать "мало-мальски сложным"? ООП там нет.
Я вообще не против ООП, тем более, если оно встроено в язык. Мне не нравятся практики из 90-х, когда в том же гуи все наследуется от супержирного базового виджета, а весь функционал приколочен гвоздями и инкапсулирован так, что поменять что-то можно только через систему костылей.
>>1554349 >Редактор Unity3d написан на immediate mode фреймворке. Это достаточно серьезно? Я уверен, что они поверх него навертели ООП врапперов
>Emacs У емакса считай что гуи вообще нет
>Мне не нравятся практики из 90-х, когда в том же гуи все наследуется от супержирного базового виджета, а весь функционал приколочен гвоздями и инкапсулирован так, что поменять что-то можно только через систему костылей. Оно так неспроста и лучшего способа делать гуй пока не придумали
>>1554322 >я просто брал его классы, переписывал и они получались короче либо вообще исчезали. В классе десять методов, а нужен только один - ну как не выкинуть девять не нужных, написав класс из одного метода ? - понимаю. Или, так и хочется выкинуть весь класс, а нужный метод оформить в виде функции, да ?
Однако "оптимизацией" подобные выкидывания, переписывания и упрощения - не являются. Оптимизация должна не укорачивать код, а делать его быстрее. От того, что программа даже, пускай, не будет иметь классов вообще, она быстрее сделается лишь не намного.
Недостатки : Лишний в ней, "мёртвым грузом" заведомо не используемый код - не способен помешать, ведь он, тупо, не используется, а в адресное пространство программы загружаются только хотя бы однажды вызванные из класса функции - не используемые при работе программы функции так и пролежат на диске в её файле. Да, размер файла программы они увеличивают, но это не сопоставимо с неуклонным ростом размера дисков.
Преимущество : "Лишний" код в классах, включая сами лишние методы, не мешают разработке, так как они инкапсулированы в отдельный файл, а имена методов и свойств не пересекаются с именами функций и переменных кода, который пишет разработчик, так как находятся они в другом пространстве имён, начинающимся с имени класса.
Вопрос в том, далеко ли спрятан код класса от пакостливых рук - например, внутренние функции и операторы языка спрятаны достаточно далеко, чтобы разработчик не начал чего ни будь "улучшать" - няхай своё пишут, а не лезут с исправлениями. Так же, контролы визуального интерфейса высокоуровневых языков надёжно спрятаны от любознательных охотников чего ни будь откромсать, переписать или выкинуть, такое желание закономерно и ожидаемо.
Оптимизация : Если сравнить два варианта кода, делающих одно и то же, но один из которых использует класс, то такой код окажется, конечно, медленнее. Просто нужно делать классом что-то монументальное, редко, не в длинном цикле вызываемое, но они, собственно, для этого и делаются - одним вызовом метода совершить много работы. Конечно, если делаешь критический код, там не должно быть никаких классов, но он и не будет слишком большим.
В остальном, как тут не отпинывайся от ООП, оно неизбежно : так же протестовали и против высокоуровневых языков - сейчас даже микроконтроллеры программируются на них, добрались, со всеми тяжкими, классами, скрытыми внутренними функциями языка и прочее.
>>1554344 И как это применить ? - первое генерирует таймер, второе закрывает программу. "Sleep(2000)" заморозила программу, может ты как-то хочешь дать ей отбой.
>>1554351 >Я уверен, что они поверх него навертели ООП врапперов Не навертели. >У емакса считай что гуи вообще нет Наоборот, емакс - это одно сплошное гуи, пусть и текстовое (хотя графика там тоже есть). Еще как пример - чисто сишный блендер. >Оно так неспроста и лучшего способа делать гуй пока не придумали Давно придумали, просто вынуждены использовать легаси родом из 90-х вроде Qt.
>>1554355 >>ну как не выкинуть девять не нужных когда там в С++ уже завезут =delete для своих методов а не только операторов и конструкторов/деструктора? Чтобы я писал так:
>>1554386 не идет, так можно делать. Можно удалять делать недоступным базовый функционал
И если в гламурных С#/Java это пофиг, то уж в С++ который весь такой под оптимизации - уже давно пора сделать какой-то механизм для гарантированного удаления говна на уровне компилятора.
>>1554381 >когда там в С++ уже завезут =delete для своих методов а не только операторов и конструкторов/деструктора? Retarded? Ещё в C++11 завезли. Даже для free functions можно, не только методов.https://wandbox.org/permlink/ooDbZbcgXdKwD8sD
>>1554355 а еще я вносил серьезные правки в проект, и типа после моих правок одни баги исчезали и вероятно появлялись другие для меня не очевидные.
когда тебе приходится работать с тупым человеком, тебе приходится делать такую работу, которая обычно считается ненужной, а то и вредной. даже лично для тебя эта работа вредная, так как тебе приходиться объяснять, зачем ты переписал много кода, когда как тебе нужно было лишь добавить кнопочку.
но лично ты то видишь, что если ты просто добавишь кнопку, то в трех местах съедет верстка, в четвертом месте начнет вылетать, в пятом кнопка не добавится. пока ты читал код и думал че делать, ты нашел несколько багов сверху. в таких случаях некоторые принципы разработки идут нахуй.
а на счет лишнего мертвого кода - а нахуй он нужен, он же все равно будет в системе контроля версий, так что можно удалить и восстановить по желанию. я думаю так, удалять такой код можно, что бы глаза лишний раз не мозолил. но я говорил не про неиспользуемый код, а про используемый раздутый говнокод.
>>1554631 Пытаюсь разобраться с реализацией очереди массивом.. Сап, плюсики, подскажите пожалуйста что на пикрил происходит. Она же всегда 0 дает. Тогда зачем ? Более полная часть кода тут https://rentry.co/sourcecode/raw
>>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)} и посмотри что будет.
>>1554718 >если ты нормально код запостить не можешь Какой код, поехавший. Я мимошел и увидео твои охуенно ценные ответы уровня, "идите нахуй", надменность всегда отличает находящихся под эффектом Даннинга — Крюгера.
>ты задаешь вопросы Пиздец, и вот это pr сегодня, не понимает даже как wakaba работает. Ебушка воробушка.
>>1554723 Вот, братишка понимает, что посты отсталых снижают общий уровень интересности тредов. Когда уже кресты (си с классами) перестанут преподавать в вузах? Дожить бы!
>>1554917 Тебе нужен генератор случайных чисел, где семя изменяется на 1 каждый шаг. Ты его перепиливаешь так, чтобы в для примерах трёх потоках семена были 0, 1, 2, и каждый шаг семя изменялись на 3, а не на 1. Если на быстродействие более-менее плевать, ты делаешь 3 одинаковых генератора в одинаковом состоянии, второму и третьему проводишь 1 и 2 итерации. Потом при извлечении числа выполняешь итерацию 3 раза, и берёшь только последнее значение. Из плюсов - это сработает с любым генератором, даже где семя меняется непредсказуемым образом. Не уверен что все генераторы сохранят свои свойства рандомности, равномерности распределений и всё в таком роде - нужно проверять.
>>1554920 Угу, и это утонет, тому что он вместо 10 мс будет генерировать 10к значений в течении нескольких секунд.
Лучше тогда единый циклический массив создавать, и оттуда с помощью атомарного счётчика извлекать значения. Например, буфер на 256 значений. Метод атомарно увеличивает значение, забирает число, и потом генерирует новое (в массиве помимо числа хранятся состояния генератора и номер). Можно и стек какой-нибудь неблокирующий прикрутить, но что-то я больше в циклический массив вижу.
>>1554748 Ещё лайфхак: не читать посты, в которых есть буква Q. Моя жизнь действительно стала намного легче, когда я начал игнорировать qt-детей в этом итт треде.
Два вопроса по теме «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 а-ля Александреску ведь то же самое делает. Разве нет?
>>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 ебать там комментов насрано но я, несмотря на то что и целиком книжку александреску читал (еще в нулевых) и "шаблоны с++" вандервурда тоже читал, те, в принципе, могу понять че там делают, НО нахуя? зачем
У меня есть луп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 функциях
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, при этом неся на себе тяжелый груз обратной совместимости с пред. С++ стандартами.
>>1555673 Это не лаба, я вообще пытаюсь учить плюсы только пять дней по вечерам после работы. >>1555687 >скажи кто тебя гото научил Вот тут пример посмотрел. Единственная отговорка почему его "нельзя" использовать заключалась в том, что это якобы усложняет чтение программы и можно запутаться в порядке выполнения кода. Хотя, мне показалось, что это наоборот облегчает переход из одного участка кода в другой, так как не нужно создавать 99999 булианов и проверять их значения. И как выпрыгивать из многоуровневых циклов без готу я вообще не представляю. https://ravesli.com/urok-66-operator-goto/
На практике goto используют только новички, или деды с седыми яйцами. Если у деда ещё не начался маразм, то ему можно, потому что он наверняка знает что делает и в конкретном случае этот goto имеет смысл.
>>1555753 Goto затрудняет понимание кода, рекомендуют избегать это. Из цикла всегда один выход, можно еще через break дополнительно делать, если требуется. Кстати почему такой бугурт с ЛАБ? Вы думаете дохуя в универах объясняют и типа если возникают трудности/вопросы, то человек не учится?
>>1555768 Лично я ещё с начальным уровнем знаний научился гуглить и думать, а не ныть, что "это мы не проходили". А по постам большинства тех, кто идёт сюда с лабами, сразу видно, что думать они не хотят.
>>1555753 без гото инструкции выполняются последовательно и даже циклы и операторы ветвления работают в определенных рамках. в этом вся суть, глаза знают куда прыгать при чтении кода. гото же позволяет делать неведомую хуйню
давай чуть попозже мне станет скучно и я тебе распишу че ты хочешь там с кнопками сделать, если успею
Ваши все высеры про goto похожи на результат того эксперимента над обезьянами, где их водой обливали. Никто из школьников-хейтеров goto итт его никогда не использовал и не встречал где-то кроме статей "топ 10 ебанутых фич c++", но считает важным упомянуть, что это плохо
>>1555767 >На практике goto используют только новички Я новичок и просто не могу представить как можно делать эту логику перепрыгивания в нужные мне участки кода по другому, у меня не хватает знаний. Узнал об операторе, нашел пример его использования, он мне показался подходящим. >>1555777 Это не лаба, я закончил университет год назад (могу пруфануть). Хотя лучше бы это была лаба, в таком случае у меня был бы преподаватель объясняющий хоть что-то. Но я совсем один, у меня нет ни знакомых ни друзей программистов. Все что я могу - это гуглить и собирать информацию по крупицам. Вот я насобирал и написал этот говнокод, я же не знал, что так нельзя. Теперь знаю. Спасибо.
>>1555768 >Кстати почему такой бугурт с ЛАБ? Я самоучка, и потратив смешное время ещё в школе на кодинг своего платформера на gdi+ просто по фану без какой-либо цели, все эти лабы стали очень простыми. Если человек спрашивает что-то уровня лаб, то это выглядит так, как будто он просто не удосужился 30 минут посидеть и разобраться. Потому и некоторое презрение иногда проскакивает - как будто человеку этот код не интересен, а он хочет сделать конкретное задание и забить. Даже если я сознательно понимаю что это не так, отделаться от общего негативного впечатления не всегда получается.
Те ребята которые гонят на гото мне тоже не нравятся. Концепция очень хорошая и отражает то что действительно происходит на процессоре. Если поймёшь гото - то поймёшь всё остальную логику с условными переходами в любых рекурсиях и циклах. Использовать его не стоит в чём-то сложнее кода в один файл или выхода из двойного цикла (где goto полностью эквивалентро return-у в функциях, который никого особенно не смущает почему-то), но разобраться он как работает и какие побочные эффекты вызывает - очень хорошая идея.
>>1555831 Это си, гений. И там это используется а-ля try\finally очистка ресурсов.
И вообще, goto очень серьезно ломает всю систему жизни обьектов в С++, там ехал UB через UB, если не знать точно, что ты делаешь, что не является случаем студентиков.
>>1555849 И что что Си? На крестах без ООП ты как будешь ресурсы очищать? try\finally платформозависимый код и не везде может применяться, да и вообще эта конструкция еще опаснее и сложнее, чем goto. Goto позволяет улучшить качество кода и сократить его.
Т.е. ты просто сравниваешь variable == true (true == true), что на выходе выдаст тебе true, а можно писать просто variable, которая на выходе тоже даст true.
>>1555898 По самому язык бери любую книгу из шапки.
По "Windows.h" копай в сторону WinAPI. На эту тему есть отдельная литература. Однозначного аналога для Unix нет, он не такой монолитный, как винда. Тут и POSIX API, и вещи, типа dbus/xcb/etc. В общем, много всего. Хипстерский сайтик, где всё это было бы в удобном формате в одном месте, ты вряд ли найдёшь. Придётся копать кучу литературы.
>>1555916 Все топовые крестовики мира пишут про RAII, но сегодня мы узнали от эксперта с двача, который знает, про что С++, что все эти эксперты ошибались. Что же делать. Как быть.
Хотя если у тебя есть желание продолжить меня смешить - можешь рассказать нам, про что С++ по твоему авторитетному мнению.
>>1555898 >библиотеку Windows.h Освой создание простых (без кастомных контролов и GDI) GUI на чистом WinAPI. Освой многопоточность через processthreadsapi.h. Освой получение данных о железе через WMI.
>tcp Winsocks
>http WinHTTP. Есть ещё WinINet, но я не юзал его.
>>1555927 Это >>1554331 случаем не твой пост? Я вижу ты любишь жрать говно. Иди вики хоть открой и посмотри, что такое мультипарадигменный язык программирования и какие парадигмы доступны С++. Топовые крестовики похоронили ООП еще в 2015-2017.
>>1555927 так то raii щас нужен когда нужно управлять другими ресурсами, а не памятью для памяти есть умные указатели (и в стандарте тоже), которые и реализуют из коробки идеому raii также семантика перемещения вообще позволяет реализовать интересный подход, когда отказываются от выделения чего-то на куче, а делают все на стеке
>>1555936 Спасибо за то, что решил таки продолжить меня смешить, тебе это удается. На всякий случай - ООП это парадигма, а не использование слова class в нужных местах.
И да, ты прав в том, что язык действительно мультипарадигменный, и за счет этого он позволяет в нужных местах использовать наиболее подходящие инструменты, а не тупо забивать гвозди ломом, при этом вопя что ООП ПРОШЛЫЙ ВЕК ДЖАВА ГАВНО НАСЛЕДОВАНИЕ АХАХА ДЕДУЛЬ
>>1555941 В линуксе вместо винсока дефолтные BSD сокета. Собстно, винсок - это калька с них. Вместо WinHTTP там дефолтный libcurl, кстати, настоятельно и под виндой рекомендую его использовать. А еще лучше - обертки, типа curlpp были, которые сишный ад превращают в читаемое C++ API.
>>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 - вот тут ты эту хуйню высрал. Но продолжай маневрировать.
>>1555986 забавно то, что когда ты пишешь гуй на qt внезапно обнаруживаешь что ты пишешь гуй на js, лол точно так же и гуй на gtk удобней писать на vala..
go-to кстати, быстрее switch процентов на 10-15%.. одна из забавных оптимизаций, работающих и в настоящее время.. из-за лучшего предсказания переходов.. положим, если в каком нибудь интерпретаторе можно переписать основной луп со свитчей на goto то можно получить нихуевый буст к скорости..
>>1555968 Объектно-ориентированных подходов много, конкретно тот самый ООП мертв.
>>1555975 Что-то я не вижу там этого. И да, вон выше вырезка из вики для тебя. В ООП владение ресурсом реализуются через RAII идиому. С чем ты не согласен то? И так давай подведем итоги: 1. Ты не умеешь пользоваться оператором goto, как следствие яро утверждаешь что он не нужен, что говорит о низком скиле 2. Обосрался в терминологии RAII, не до конца осознаешь что такое объектно-ориентированный подход в программировании, как он может быть реализован 3. Додумываешь какую-то хуйню у себя в голове из-за низкого уровня знаний и некомпетентности, каши в голове и выдаешь это за мои слова или свою истину. 4. Список маневров: > Ох, эти проекции сбрендившего студентика. > Но продолжай маневрировать. О да это же самый базовый метод маняврирования - уличить оппонента в маняврировании > Где вас, таких конченых идиотов берут, и что вы забыли в С++ треде? > Спасибо за то, что решил таки продолжить меня смешить, тебе это удается. > Все топовые крестовики мира пишут про RAII, но сегодня мы узнали от эксперта с двача, который знает, про что С++, что все эти эксперты ошибались. Что же делать. Как быть.
Хотя если у тебя есть желание продолжить меня смешить - можешь рассказать нам, про что С++ по твоему авторитетному мнению.
В принципе все твои посты это флуд и маневры, по делу нуль полный.
Насрал в штаны - признай это. Нет, опять какую-то хуйню несет. ООП у него в C#, навыки пользования оператором goto у него показатель скилла, и прочая хуйня.
>>1556074 Я ничего тебе больше не буду говорить, тут понятно, что между нашими скиллами разницы миры, и ты даже понять не можешь, что я тебе пишу.
Когда устроишься на первую работу - попробуй нахуярить GOTO в проде, расскажи всем, что классы устарели, ведь это ООП, и доставь кулстори о результатах.
не знаю что вы тут спорите, ведь все очевидно: - гото действительно можно использовать для лаконичности кода долбоебы в общем то и без гото нахуярят говна
- ооп это блять простой подход для распределенной работы над проектом нескольких человек, я же расписывал недавно
- студенты хуесосы и идут нахуй. раньше я на них тоже бугуртил "иди погугли даун первая ссылка", а за это модераторы хуесосили на форумах. потом я понял, что если все таки решать их глупые задачи, то они так и останутся долбоебами, а это хорошо. зачем продолжать плодить вкатывальщиков?
>>1556110 ООП это грамотная организация кода, которая позволит тебе в будущем и настоящем его улучшать, либо использовать в других программах. Не следовать его принципам можно только если ты любишь поковырятся в собственном дерьме/не планируешь использовать исходный код, в том числе изменять его/любишь изобретать велосипеды.
>>1552778 (OP) Сап, хочу несколько тупых вопросов задать. 1. Что мне мешает на любую околоматематическую функцию вешать constexpr, вдруг где-то внутри сконстантится? 2. Что мне мешает на любую работу с фиксированными векторами, типа элементы вектора A возвести в квадрат и передать в B вешать (если работаем в цикле) #omp parallel for и радоваться ez параллелльности? 3. Если для случая выше применить std::transform, может ли оно когда-то где-то само соптимизироваться в параллельность?
>>1556239 А как было раньше? Я пока не хочу включать c++17, так как очень опасаюсь ситуации, что проект придется пересобрать на редком компиляторе под специфическое железо. Или раньше деды прям ассемблер вставки делали?
имхо, мне не нравится когда дают определение ооп как методологии программирования подход, когда к ооп относятся как к одному из вариантов реализации пользовательских типов данных и задания отношений между ними, мне ближе, тк позволяют дать более формальное (близкое к математическому) определение в с++ класс - это пользовательский тип; доступные операции над типом задаются через определение членов-функций; переменная типа - это объект; способ создания объекта задается парой конструктор-деструктор; отношения между типами задается посредством наследования классов, посредством членов-функций преобразования и конструктора преобразования; динамический полиморфизм взаимосвязанных типов реализауется через механизм виртуальных функций; и далее по списку.. в других языках существуют другие способы реализовывать пользовательские типы, вообще работать с типами но в с++ все же основной подход остается через ооп
>>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 грамотно организовать код можно и без ооп. повторно использовать код можно и без ооп. ковыряться в дерьме и клепать велосипеды можно и с ооп.
давай подробно разберем повторное использование кода, для примера. как ооп помогает в этом? то есть ты предлагаешь просто взять и скопировать нужные классы в другой проект? допустим даже код без багов, а если в другом проекте не будут нужны все поля из первого проекта, или некоторых будет нехватать? а в третьем тебе одна функция нужна, ты серьезно это пишешь дебил бля ебаный? пошел нахуй школьник
>>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); }
>>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 > 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 ага в стандартной библиотеке есть набор стандартных функциональных объектов, адапторов, привязок, при помощи которых ты можешь комбинировать функторы, свободные функции, функции-члены классов, лямбда-функции между собой, порождая новые функторы, ну а дальше передавая их в стандартные алгоритмы, например
>>1557265 Можно, если ты хочешь обращаться функциональщиной. А можно сделать функцию F, которая внутри себя складывает результат вызова f1 и f2. И передавать в нее x и указатели на эти две функции. Либо std::function вместо указателей, если плюсовым способом, а не сишным. Или захардкодить вызов этих функций внутри F.
Идея может странная, но я могу к оператору вывода в поток добавить функцию? Например я пишу функцию test и комбинирую её с выводом в поток. В итоге получаю измененный поток вывода, который сначала выводит в поток строку, а затем вызывает функцию test
Захожу раз в 2-3 дня. Слабо как-то пока, неинтересно. Хоть бы the darkest corners языка пообсуждали бы или там приёмы интересные из опыта. Или статьи по С++ с arxiv. А так, лабы-хуябы, goto, ооп. Сколько можно-то? Скучно же.
>>1557286 это нужно, к примеру, чтобы сконструировать функциональный объект из существующих по месту и сразу же передать в использование (в стандартный алгоритм, в частности) щас правда удобней стало лямбдами пользоваться
вообще смысл в том что ты создаешь новый функтор посредством комбинирования других функторов, а не его определением посредством написания кода вручную
>>1557369 Если меня не обманули в инета, то все пользовательские манипуляторы работают только когда их вызвали, а вот мне нужно подобие работы манипулятора hex. Один раз вызвал и потом все целые числа отображаются в шестнадцатеричном виде. Только в моём случае вызов манипулятора запускает подсчет выводов в поток
>>1555797 >Никто из школьников-хейтеров goto итт его никогда не использовал Использовал в дипломной работе для выхода из вложенного цикла. Брат жив, зависимость есть.
Где-то у Страуструпа есть телега, где он пишет, что в этом случае goto самый простой, а потому самый лучший способ.
В качестве альтернативы некоторые предлагают использовать исключения. Уёбки.
Как правильно освобождать память в динамической матрице (динамический массив указателей на динамические массивы чисел)? Делал это как на пикрил — программа через раз крашится. Не смог выявить, в каких именно случаях, но это прекратилось, когда я убрал этот кусок кода. Не понимаю, что не так, мне казалось, что все логично. Памагити!
>>1557675 Быстрофикс: вылеты происходят, когда я пытаюсь выделить память на новую матрицу (адрес сохраняю в тот же указатель), и только в том случае, когда новая матрица больше по размеру.
Какими операторами лучше реализовать программу по типу ребиндера. Что бы менять кнопки клавиатуры местами, и всякий доп функционал, например одна и та же кнопка F становилась цифрой то нампад1, то нампад2, то нампад3, в зависимости от кол-ва нажатий? В какую сторону копать?
Сколько просить денег при устройстве плюсовиком? Город милионник в окрестностях москвы. Опыт какой-то есть. Сколько просить в москве если надумаю понаехать? Сколько платят например в мэйлру? Есть какая нибудь статистика по зарплатам? Накидайте советов в общем как себя вести при трудоустройстве.
Сап Я новичек в теме, могу глупостей написать, так что соре Есть вопрос: Совместима ли библиотека json-c и c++, и если да, где найти гайды по работе с ней ?
>>1558410 Почти все сишные библиотеки могут работать с С++. Конкретно json-c у нас где-то есть в проде, работает норм.
Но я бы строжайше не рекомендовал использовать сишное говно в крестокоде - посмотри на самую правильную JSON либу существующую - https://github.com/nlohmann/json
>>1558244 10 лет бд, формошлёпства и петов, всякая низкоуровневая поебота уровня ардуин. В общем не блидинг едж, всякую вычурную плюсовую пургу не вкуриваю, но задачи выполняю. Не задрот, проще говоря.
>>1558266 Это понятно что зависит. А как сориентироваться то?
>>1558235 Вообще я так понял нужно что-то более адекватное чем плюсы искать? Что посоветуешь для беспроблемного трудоустройства?
>>1558645 >нужно что-то более адекватное чем плюсы искать? Если есть опыт разработки бэкендов высоконагруженных, обработки видео-аудио, блокчейны, компьютерного зрения и машинного обучения (тут хорошо бы еще питон знать), и т.п., то прекрасно устроишься и тебя всячески ублажать будут. А просто так С++ кому особо нужен? Это же не джава, на хороших плюсовых вакансиях он обычно идет плюсом к серьёзным задачам.
Ну можно еще на какое-нить формошлептство на Qt и прошивку микросхем устроиться, но там зп микроскопическая обычно, сам же знаешь.
>>1558951 Нормальные люди запихивают свои формочки в *.ui и добавляют uic в pre-build step. В конструкторе у них остаётся m_ui = std::make_unique<Ui::MoyaForma1>(); m_ui->setupUI(this);
>>1558732 В том то и дело что не знаю, какой расклад. Ну теперь понятнее стало. До этого фрилансил на другом языке и вообще трудоустроен был чисто формально. Вот думаю вкатиться в С++ или другой язык уже искать, посмотрел стату по зарплатам, вроде примерно одинаково все получают, а в случае с С++ предположу это будет поддержка говна мамонта. Высоконагруженный бек осилю, но опыта мало.
Аноны, буду очень благодарен, если вы подскажите, что и где надо статически слинковать, чтобы приложение qt не требовало дллок. До этого работал только в clion, там всего одну команду надо было прописать в cmake, а тут муть какая то.
>>1559468 Пиздец, а как по-твоему работать без проекта? Если ты очень ебанутый, можешь всё в одном проекте писать, но с разными конфигурациями, исключая при этом ненужные файлы из сборки
>>1558418 Внутри вектора такое же говно на указателях, но вектор нихуя не зеро кост. Как минимум пуш бек каждый раз выполняет лишнюю проверку. Вот я зарезервил 1 млн элементов, пушбекаю, и у меня 999999 раз пройдет бесполезная проверка на сайз != капасити.
>>1559592 Судя по большинству постов здесь, плюсовики вообще пишут исключительно уберхайлоад и исключительно для уберслабого железа. Поэтому язык и уходит из прикладухи, что вся эта перформансопетушня отпугивает новичков.
>>1559638 Так-то благодаря предсказанию переходов и какому-нибудь if [[__builtin_unlikely]] (size_ == capacity_), эта хуйня почти не будет влиять на скорость. Да и не так страшен пушбэк, как сортировка пузырьком после него..
>>1559601 Крестослесаря прост, шараги где учат крестослесарей. Специфика пахомии. Так-то видел вакансии в самых разных сферах, буквально вчера кресты шли в дополнение к аналитике с биг датами с окладом 400k в месяц на руки.
>линкер нахуй. Дык очевидно: статическая переменная должна где-то жить. То, что в классе - это объявление, но она также должна быть определена в какой-нибудь единице трансляции. Также не забываем, что каждое инстанцирование шаблона - это отдельный тип.
>>1559678 А теперь попробуй не внутри класса определить класс со статической переменной, а снаружи, внутри инициализировав его экземпляр. Теперь любой инстанс твоего шаблонного класса будут обращаться к классу снаружи с - о, чудо! - статическим членом. Ты не просто не понял, как работает генерация кода в этой ситуации.
>>1559671 Как вариант. Родитель - обычный класс, наследник - шаблонный. Ещё можно внутрь класса положить указатель на глобальную переменную, но это пахнет плохо совсем.
>>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[] к обьекту, у которого не начался лайфтайм - уб, ты либо теряешь в производительности в любом случае
>>1560055 повторюсь, вместо того чтобы делать reserve и push_back, делают resize и [], это и позволяет не делать bound checking (о чем ты слезно и ныл, что мол это "медленно" и поэтому стандартный вектор - говно)
>>1560063 такое имеет смысл делать если хранятся в контейнере не объекты а указатели (умные указатели) на объекты ну либо если хранятся примитивные типы в контейнере но, да, скорей всего и в этом варианте будет не быстрей
в любом случае ты зря доебался до того что выполняется bound checking при push_back, там же эта проверка быстрая, по сути там идет не проверка больше/меньше, а проверка на неравенство указателей, те программиский прием guard-значения
>>1560067 Перечитай мой первый пост. Я жалуюсь на то, что плюсы пропагандируют зеро кост, и при этом в одном из самых популярных контейнеров стандартной либы нет возможности сделать пуш_бек без проверок, что как-бы с зеро-кост слабо сочетается. А как там внутри реализовано это от компиля к компилю варьируется
>>1559126 >Аноны, буду очень благодарен, если вы подскажите, что и где надо статически слинковать, чтобы приложение qt не требовало дллок. В арчике для mingw есть qt5-base-static, в msys2 тоже готовый пакет идет. Под студию сам пердолься, собирай (но будь готов к тому, что какой-нибудь плагин неправильно скомпилируется, и придется вилкой чистить). В 5.13 статически слинкованое окошко с формочкой около 17 мегабайт, 8 после upx.
Я очень жёстко туплю, помогите кто-нибудь. У месть есть 2 текстбокса, в один я записываю цифры через пробел, жмякаю на кнопку и числа из первого выводятся во второй. Для этого нужно использовать стек обязательно. Я написал код, но числа выводятся В ОБРАТНОМ ПОРЯДКЕ. То есть, записываю я 1234, а он выводит 4321. Что мне переделать?
>>1560169 >но числа выводятся В ОБРАТНОМ ПОРЯДКЕ Ты представляешь что такое стек, да? Это яма. Ты засунул 1, засунул 2, засунул 3. Пока не достанешь 3, извлечь 2 или тем более 1 тебе не получится. Тебе нужна очередь, а не стек.
>>1560169 А, да, тебе достаточно заменить [str2=str2+System::Convert::ToString(stk.Peek()) + " "] на [str2=System::Convert::ToString(stk.Peek()) + " "+str2]. Или сделать то же самое на стадии считывания. Просто конструировать строчку таким образом очень неэффективно, а использование очереди во много раз разумнее и это мне показалось более важной проблемой, чем твоё нарисованное ограничение.
Собственно если у тебя прям строчка есть, то можно вовсе без стека - размер изначальной строчки известен, размер конечной строчки такой же, можно без стека напрямую переписывать первую строчку во вторую. Зачем тут нужен стек или очередь - не понятно. Просто так для галочки, записать в него, а потом считать из него.
>>1560180 >[str2=System::Convert::ToString(stk.Peek()) + " "+str2] Спасибо, теперь всё как надо. >ачем тут нужен стек или очередь - не понятно. Просто так для галочки, записать в него, а потом считать из него Для этого и нужен, для галочки.
кстати, теперь ведь есть еще один стандартизированный способ разбиения строки на токены, а именно в библиотеке регулярных выражений есть regex_token_iterator
>>1560727 >Несколько быстро работают регулярки в плюсах? скорее всего с производительностью, сравнимой с реализациями тех же самых регулярок в других языках программирования.. потому что регулярки ведь старая технология уже, как их оптимально реализовывать уже известно..
с регулярками в новом стандарте, кстати, щас стало можно по быстрому распарсить, к примеру, хмлку или json файлик.. те не полноценно распарсить а выдрать данные.. не надо подключать тяжелые библиотеки, тащить их в проэкт и все такое..
>>1560769 You 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изъёбываться с шаблонами и тюплами?
>>1561488 Разные события и с ними идут свои параметры (или их может не быть вообще) поэтому сигнатура не всегда одинаковая. Короче, пока решил сделать так: класс Event, в нём массив\вектор из строк, затем они будут преобразовываться в нужный тип (вроде int, float и тп).
>>1561507 А хер их знает. Думал может быть как-то можно хранить и передавать тюплы.
Нужен автокликер для одной игры. Юзать готовые - не вариант, ибо там вся реализация через апи ос, которые игра детектит. Надо как-то на аппаратном уровне имитировать нажатие клавишь. Нашел что-то про HID протокол, потом нашел libusb упрощенную обертку для управления этим протоколом. Пока особо документацию не читал. Перед этим хочу узнать, туда ли я вообще копаю? И насколько это реально сделать программно, не понимая и не зная как вся эта микроконтроллерная хуйня устроена и как она погромируется?
>>1562230 Драйвер свой напиши. Примеры драйверов мыши и клавы есть были в ресурс ките. Драйверы работают с другим API, займёт время разобраться. Х.з. какие у тебя задачи. Я вкорячивал в свой драйвер скрипт-энджин, которому подсавывал свои скриптики в рантайме.
>>1562238 А драйвер этот, он же должен быть вшит в микроконтроллер? Т.е. мне надо еще покупать саму деталь, паять схемы какие-то? Свою клавиатуру я вряд ли рискну портить своими "драйверами". Мог сейчас хуйню написать, просто я вообще не имел с этим дела и имею 0 представления об этом всем. Но с классическим программированием я знаком и с/с++ владею.
>>1562230 Что за игра? Возможно сработает метод с очисткой флага эмуляции. Для этого потребуется зарегистрировать свой глобальный хук. В ином случае придется писать драйвер, а это задача не для ньюфага. Еще можно взять готовый драйвер, который предоставляет подобный функционал, такие тоже существуют.
>>1562230 Vjoy не работает? У меня он во всех играх работал без подводных. Можешь взять и перелопатить драйвер для планшетов ещё: https://github.com/hawku/TabletDriver - наверное там есть все нужные тебе куски кода.
>>1561598 Хуйню изобрел. Джаваскрипт какой-то. Если у тебя несколько событий, о которых нужно уведомлять наблюдателей, сделай несколько сигнатур колбэков - по одной на каждый тип событий.
>>1562257 Аллоды онлайн. С хуками дела тоже не имел. Это что-то на уровне демонов? Насчет драйверов я вообще сомневаюсь, я не знаю как это все устроено и работает, соответственно и нагуглить вряд ли смогу. Я вчера пробовал искать туториалы по написанию драйверов и даже понять не смог, то ли я вообще нашел.
>>1562258 Не пробовал, но пробовал около десятка других, ни один не работал. Только AutoHotKey кое как брыкался. Пару раз кнопка сработает и все. Пробовал обманывать, менять частоту случайным образом между нажатием - не помогло. Заметил только, если самому нажимать любую клавишу вручную, то тот скрипт снова пару раз отрабатывал и глушился. Явно защита какая-то в самой игре. Сейчас попробую с vjoy.
>>1562355 Эмулятор джостика-мышки-клавы. Грубо говоря, если ты собрал на условной ардуине свой кастомный джостик для вертолёта и не хочешь писать к нему сложный драйвер с вниканием в winapi, то ты можешь за несколько строчек написать всё что тебе нужно через vjoy, и игра сможет понимать твой джостик. Никто не мешает тебе использовать его без джостика для автокликера и вряд ли много какая игра специально блочит vjoy.
>Явно защита какая-то в самой игре. Я бы смотрел одинаковая ли задержка между нажатиями, и чтобы между событием нажатия и отпускания было адекватное время, если бы делал защиту.
Значения, вроде, адекватные, но работать стабильно не хотят. А насчет vjoy, я мало что понимаю. Открыл конфигуратор, ничего полезного не нашел для себя. Потом еще погуглил, я правильно понимаю, что мне нужно написать некий "feeder", который надо будет каким-то образом скомпилировать и запустить средствами vjoy? Насчет документации, нашел только какой-то мануал в sdk, который не уверен, что вообще нужен мне. Речь, ведь, шла о просто vjoy, как о самостоятельной утилите, а сейчас выясняется, что, похоже, еще и какие-то пакеты/библиотеки надо докачивать. Я не жалуюсь, просто я не понимаю: в том ли я вообще направлении двигаюсь.
>>1562387 >мимокрок >идешь нахуй из треда это еще че такое если ты не заметил, то рандомные вейты там это как раз способ обойти некоторые "запреты на скрепты", работающие на детектировании одинаковых задержек, так что ты либо вникаешь в цепочку постов, либо идешь нахуй из треда мимокрок
>>1562387 Так я и не против. Вы мне импульс хотя бы дайте какой-то. Я никогда не писал драйверов и слету вот так понять не получается. Я даже не понимаю то ли я гуглю... Вот, мне про vjoy написали, это не скрипт, насколько я понял. Но на мои вопросы, касаемо него, пока еще не ответили.
>>1562388 У меня она геймерская, но макросы не поддерживает. Хотя... Мб где-то в закромах древнюю х7 можно поискать...
>>1562389 обезьяна, ты не понял. он либо обдрачивается сями и пишет свой драйвер по хардкору, если уж он хочет нечестно играть против обычных игроков, либо идет нахуй со своими шизофреническими проблемами с автохоткеем, потому что это оффтоп и щитпостинг.
>>1562391 >Я никогда не писал драйверов и слету вот так понять не получается в программерс тредах такой обсурд писать да ты совсем охуел
>>1562397 >если уж он хочет нечестно играть против обычных игроков Ой, блядь, началось... Я никак не связан с игроками и на их процесс игры вообще никак не влияю этими действиями. Ты какой-то обиженный, я смотрю. Не хочу с тобой общаться.
>>1562230 >Нужен автокликер для одной игры >>1562399 >Я никак не связан с игроками
панимаешь, чмоха, просто так в игры не добавляют защиту от скриптов, ее вообще почти никогда не добавляют, значит скорее всего ты играешь в какую то онлайн дрочильню, где макросы создают такое преимущество, с которым разрабам приходится бороться. следовательно я делаю вывод, что ты пиздабол ебаный и идешь нахуй, даже не сказал какая игра, такая ты гнилая паскуда
Вообще, касаемо драйверов. Мне же нужен драйвер на стороне устройства, а не пк. Хотя, возможно, и там и там они потребуются. Драйвер на устройстве бы посылал сигнал нажатия клавиши, а драйвер на пк получал бы его и передавал ос. Я это понимаю пока что только так. Могу ошибаться. Но если все же я прав, то мне понадобится каким-то образом перезаписать драйвер микроконтроллера клавиатуры своим. А это может повлечь за собой не работающее устройство, которое я своими силами уже вряд ли смогу восстановить. Да и вообще, насколько я знаю, для установки прошивки на микроконтроллеры нужно доп оборудование, которого у меня нет. Короче, пока не особо все ясно.
>>1562412 >перезаписать драйвер микроконтроллера клавиатуры ты либо пишешь драйвер для своего кумпуктера и пользуешься им и не трогаешь устройство, либо делаешь эмулятор на хуярдуине и не трограешь драйвер. у тебя два выбора потому что свою клавиатуру за сотку ты перепрошить в этой вселенной точно не сможешь.
>>1562415 Я конечно не эксперт по драйверам, но.. на фоне этого треда ещё какой - написал аж целый один, хоть это и был курсач на втором курсе
Короче, есть стэк драйверов. В винде они ещё делятся на фильтрующие, генерирующие, и какие-то там ещё, похуй. Между ними определены интерфейсы, нижние драйвера принимают хуйню, что-то с ней делают (в основном преобразуют для соответствия интерфейсу), и передают верхним. По идее, тебе нужно написать драйвер и подсунуть его куда-то в стек клавиатуры (желательно в конец, но опять же похуй). Он будет просто пропускать сообщения, но иногда по внешнему сигналу будет создавать свои.
Выглядит не так уж сложно, может даже получится отмахаться одним UMDF. А общение себя с драйвером для начала лучше организовать через файл, иначе заебёшься. И лучше заниматься всем этим в виртуальной машине, потому что на синие экраны ещё насмотришься.
Обосрался с советов итт, пчел с аутохоткеем разобраться не может, а вы ему драйвера предлагаете писать. Это аутист даже не изучил доки ахк, а там ведь черным по белому написано, что по дефолту ахк использует жиденький метод инпута, который игра тупо не обрабатывает. Пусть выкидывает нахуй свое скриптоговно и пишет код на нормальном языке, напрямую обращаясь к винапи. SendInput, скорее всего в этой поделке мейлсру будет работать.
>>1562510 Какой еще жиденький метод инпута? Все эти программы как раз и используют винапи. Только что в макс пейне проверил, там все работает, ибо защиты там никакой нет. А в том дерьме от мейлсру оно есть, внезапно. Не будет винапи работать, я в этом уверен.
>>1562510 Я знаю. Я и сам особо не хочу сейчас ебаться с этими драйверами, ибо мне нужно побыстрее получить результат. Потом уже, для себя, можно было бы попробовать, в принципе, давно уже хотел попробовать, но руки не доходят. Про vjoy мне выше писали. Попробую пока его покурить. Хз что выйдет из этого. Если ничего не выйдет за несколько дней, то пойду спаяю какой-нибудь простенький генератор импульсов, который будет дрочить реле, лол. Надо было его, наверное, сразу собрать.
>>1562527 Такой еще жиденький метод инпута, открой доки ахк и посмотри. Не те апи он использует, вместо эмуляции нажатия кнопки, посылает сообщение игре, которое игра не обрабатывает. SendInput будет работать, ставлю жопу. Если нет, то как я уже писал выше, игра скорее всего регистрирует свой глобальный обработчик, который обходится регистрацией своего обработчика поверх этого.
Как оптимизировать программу и находить возможные ошибки? Вот у меня код по времени не проходит, хотя алгоритм как по мне оптимальный. Может быть у меня вобще ошибка не связанная с алгоритмом. Например перепелнение переменной
>>1562587 >алгоритм как по мне оптимальный Ну а как оно по оценке О(...) по времени и по памяти, можешь примерно почувствовать? Или хотя бы подрочи тесты разного размера, чтобы узнать с какого начинает таймаутить.
>>1562589 >>1562590 >>1562592 Мне кажется проблема не алгоритмическая, а реализации. Прогнал макимально сложные входные данные из первой группы. Все ок. Может у меня из цикла например программа не выходит в том месте где должна. Как мне искать ботлнеки? Есть программы, которые помогут?
>>1562597 > Судя по вопросу, это какое-то олимпиадное дрочево. В точку > Странно что вас там не учат отладчиком пользоваться. Полезно еще ассертов насовать везде. У меня с компом последнее время проблемы и кучу времени приходиться тратить просто на компиляцию и приходится испольщовать онлайн компилятор. Видимо придется. Спасибо.
>>1562599 Если не хочешь ебаться с 20-гиговой M$V$, накати по-быстрому code::blocks. Лучшее в чем можно строчить однофайловые задачки. Дебаггер там тоже хорош хотя уже 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?...
>>1562597 Меня тоже не учили им пользоваться, но я сам придумал везде вставлять printf, а потом и cout. Оказывается, смекалочка уже и тогда работала. Надо было вместо вузика сразу ентерпрайз свой запускать...
Ребят, у меня куча объектов, связанных между собой указателями. Какие готовые решения, чтобы сохранить это все на диск, а потом загрузить с него? Может, в Boost что-то есть?
>>1562636 Делай мапку указатель-объект, при сохранении так и записывай указатель, при чтении достаешь реальный объект из мапки и обновляешь значение указателя
>>1562636 тебе нужно сделать сериализацию как минимум нужно сначала будет выбрать формат хранения - бинарный, текстовый, в базе данных, десятки вариантов потом надо еще учесть ты будешь писать свой велосипед или использовать готовые библиотеки.. выбор всего этого зависит от того что за софт ты пишешь.. в бусте есть библиотека для этого, она так и называетсы boost serialization, но за ее удобство ничего сказать не могу
>>1562594 Показал бы код, чтобы понять какого рода ошибки там могут быть и в какую сторону думать - вдруг ты там вовсе расстояния вместо квадратов расстояния сравниваешь, а при проходе по двумерному циклу используешь / и %, вместо двойного цикла. Без кода никто кроме тебя не скажет в чём проблема и что фиксить.
>который обходится регистрацией своего обработчика поверх этого. Можно поподробней? Что значит регистрирует обработчик? И что значит обойти обработчик? Если это как-то связано с дизассемблированием, то я не думаю, что справлюсь. Я могу только ипконфиг прописать для взлома... Похоже, на реле собирать ключ для замыкания кнопки куда проще...
>>1562701 Какой там античит? Твое не работает очень информативно. Отладь программу и посмотри почему не работает, для начала получи статус возврата и загугли его значение.
>>1562890 И почему resize тем более несколько. У меня же размер b меняется быстрее выделения. Мне казалось ресайз просто создает еще один вектор на n элементов и переносит n элементов из массива с k элементами, а потом удаляет массив с k элементами
>>1562866 Блядь, не работает. Ты понимаешь это слово? В этой игре, блядь, не работает! Везде работает, в играх/блокнотах/хуетах, но в этой игре НЕ РАБОТАЕТ. А знаешь почему? Потому что там ебучая защита, сука, и винапишное говно там детектится! Я тебе еще сразу об этом сказал.
>>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
одно и то же constexpr в разных файлахАноним02/01/20 Чтв 16:44:34#486№1563130
есть main.cpp, в нём определено constexpr char null_char = '\0';
есть token.h и token.cpp, в которых используется null_char. Если я пишу в token.h extern char null_char;
main.cpp(8,16): error C2373: 'null_char': redefinition; different type modifiers
>>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, если надо, и его включать всюду.
>>1562228 Ладно. Как это сделать? Компилятор ругается, если я пытаюсь присвоить значение какой-то области памяти, на который указывает указатель, если в этой ячейке памяти не объявлена переменная. Как ещё можно сделать лист без библиотеки list, если не так?
>>1563322 С такой записью можно создать список из неопределённого заранее количества элементов? Как это работает? Уже встречал такой такое без шаблонов, но самого разбора работы такого кода так и не увидел.
Его надо использовать в разных файлах: main.cpp, token.h, token.cpp. Причём его надо использовать именно как известное на этапе компиляции выражение, чтобы его можно было использовать как case в switch, причём во всех файлах.
>>1563277 Мне сложно придумать ситуацию, когда придется собирать на всратом тостере, кроме разве что совсем экстремальных ситуаций, когда рабочий комп сгорел нахуй, а времени позаимствовать у кого-нибудь лишний ствол ноутбук нет, нужно собрать здесь и сейчас. Правда встает вопрос, откуда у вас тогда взялся всратый тостер. Олсо, вимом и имаксом удобно пользоваться, когда нужно отредачить пару-тройку строк где-то на удаленной машине, но если строк много, то проще перекинуть файл на рабочий комп, отредачить и перекинуть обратно.
>>1563461 > На работе легаси-говно, там хэдеры включаются и в сорсы, и внутрь других хэдеров. Блядь, а как ты хотел? Пиздец, мой ор наверное весь офис через океан услышал
Какие есть библиотеки которые могут делать за меня часть работы? Например в питоне легко переводить число в строку и обратно. Есть срезы строк. Очень удобно, но медленно
>>1563364 Блядь, я удивляюсь терпению анона, который тебе все эти ссылки дал. Неужели так сложно написать в ебучий гугл "реализация односвязного списка c++" и нужно ебать мозги другим анонам своей тупостью?
>>1563540 > Например в питоне легко переводить число в строку и обратно. Ты думаешь это так просто? Если не нужно учитывать локаль - тогда да, просто. std::to_chars, std::from_chars. > Есть срезы строк Посмотри, что там c++20 предлагает
>>1563708 Это немного не то. Для него 1, 2, 3 и 2, 3, 1 разные последовательности. Но это одно и то же сочетание. Мне нужно именно сочетания. K из n вот это вот все. Например сочетания из 4 по 2 это 1, 2 1,3 1,4 2, 3 2,4 3,4 . А next permutation вернет и 1, 2 и 2,1 как разные последовательности
>>1563713 Тебе быстро ннада? Если нет - то применяй next_permutation к вектору и копируй его содержимое в мапу с ключом-сетом. То есть у тебя сначала вставится сет (1, 2), потом ты скопируешь вектор (2, 1) в сет, там он отсортируется и станет сетом (1, 2) и при вставке в мапу дубля не будет.
Говно, но быстро и на коленке.
Бтв, господа, вы щупали уже модули от майкрософта? Я смог скомпилить со стандартными, но свои даже по туториалу не робють. И интеллисенс умирает после первого же #import. Или пока нет смысла это трогать?
>>1563673 to 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 работает и с разными базами, хоть из троичной переводи в инт. Разве что она бросает исключение и во второй аргумент записывает позицию, в которой случился косяк.
>>1563785 Напиши хоть, что сделать-то просят в задании на лабу. По скрину непонятно нихуя, кроме любви к постоянным вызовам to_string от одного значения. цикл по i не в том направлении
Благодаря быстрому интернету я не имею возможности поставить VS 2017 или 2019 для компилирования swift shader. Раздобыл четвёртую версию, она работает, но вот беда, мамин прогер почему-то поставил потолок для ядер всего шестнадцать, хотя для приличия надо 65536 минимум.
Есть тут сверхчеловек, который его поменяет, скомпилирует и кинет готовые дллки сюда?
>>1563716 > Бтв, господа, вы щупали уже модули от майкрософта? Вообще, там странно всё. Cppreference говорит, что в msvc нет модулей, хотя они там очевидно есть. В тред призывается нвидия-кун
>>1564010 Официально нет, это экспериментальная фича, как asan. Но на msdn тутор есть, хотя у меня не удалось. Но это и я могу быть дебил, а не у них что-то не так.
>>1564042 Вот я это сделал все, если импортил std.core - то тоже мило выглядело и компилилось, но сразу ломался интеллисенс. А свои модули делать вообще не получалось, хотя все по тутору организовал и с расширением .ixx(вроде такое, не помню точно).
>>1564080 Может быть просто "nd = new Node"? Ты не можешь два раза написать "Node *nd". >в nd записывается НОВЫЙ адрес? Да. >может ли он случайно повториться? Только если предварительно освободишь старый.
>>1564411 Проверить не быстрее, чем спрашивать? Интерпретируешь указатель на 50 ячейку, как на unsigned (50-53 ячейки) (почему они у тебя с большой буквы?).
Является ли хорошим тоном написать в начале класса private:, если у меня в начале класса идут приватные объекты? Или можно с этим не замораживаться? Если действительно нужно так писать в классах, то почему в структурах обычно не пишут в начале public:?
>>1564905 В смысле блять? Вот есть класс mainwindow, он у меня содержит вектор векторов содержащих указатели на кнопки. При нажатии другой кнопки этот веутор векторов заполняется динамически созданными кнопками. И где мне взять сигналы и слоты этих кнопок?
>>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);
>>1565151 Убрал конкретный PID, путь к адресу функции указал в текущем модуле, теперь SetWindowsHookExW возвращает отличное от нуля значение. Код https://pastebin.com/npprysU8
Не понимаю. Разве не должна колбек функция вызываться при нажатии кнопки в любом процессе и выводить на экран консоли процесса, который этот хук запустил "!!"?
Спрашиваю у нормальных анонов. Один и тот же хелло-ворлд, но msvc каждый проект компилит по разному. В настройках все одинаковое, вообще ВСЕ одинаковое. Почему так?
>>1565460 Проблема оказалась в этом > QObject *senderObj = sender(); > lbl = new QLabel("f"); > lbl->setText(senderObj->objectName()); > lbl->show(); Если убрать предпоследнюю строку, все работает и лейбл выводится. Почему не ясно.
>>1565513 Нет, не установил, да и думаю не в этом проблема. Сейчас интереса ради сделал такое > QObject *senderObj = sender(); > senderObj->setObjectName("ef"); И тоже не работает. > вообще, не еби мозг, создай сразу всё, а в рантайме меняй видимость Не особо понимаю как мне это поможет на самом деле, создавать то все равно придется в цикле.
Анон, который советовал хуки писать для перехвата глобальных обработчиков, ты тут? Нужна помощь.
На текущий момент написал глобальный хук, который обрабатывает нажатие клавиши в любой программе, просто информируя об этом в консоль. Вот код (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 Как разграничить загрузку файла и получение имени файла? Помогите, пожалуйста
Компиляция с порта 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 означают одно и то же. Зачем два восклицательных знака?
>>1566400 >>1566534 Написал что смог понять, возможно, там вообще бред, но я хз как можно вслепую писать, не имея базы знаний в этой области/опыта. Документации найти не смог.
>>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
По MSVS C++CLI вопрос. Я правильно понимаю, что Application::StartupPath появляется генерируется уже на этапе выполнения и мне в строку подключения к бд соответственно надо задавать в обработчике Form1Load? Программа находит бд и работает, а конструктор ругается на исключение, когда я пытаюсь исправить строку подключения oledb внутри метода InitializeComponent формы. В книжке нет полного кода, но как я понял, он задает статический путь в свойствах компонента на форме, а в коде уже в обработчике меняет строку подключения.
Вот хочу решить. Есть у меня интерфейс MySubsystem. Пользователь наследуется от него (класс Fu) При этом мне неизвестно количество и тип аргументов в конструкторе пользовательского класса Fu. То есть я не могу написать базовый констуктор в MySubsystem на все случаи жизни.
Теперь что я хочу. Я хочу запретить прямой вызов констуктора Fu f(10), потому что оно ведет к ошибкам.
Как сделать?
Чтобы можно было производный от MySubsystem класс вызывать только так Fu::Create(10), независимо от того как описан констуктор в производном классе
Да, можно в классе Fu - Fu(int ni) сделать приватным, но это плохое решение, потому что этот Fu будет писать другой человек, а значит он конечно же забудет об этом нюансе и сделает его публичным
>>1567062 если написать так: protected: MySubsystem() = default; то это ничего не даст, потому что у Fu свой констуктор (Fu(int)).
И нельзя написать protected: MySubsystem(int) = default; потому что MySubsystem не должен знать какие аргументы будут у пользовательского класса. Там может быть int/string или стопятсот классов - вся фишка тут именно в том что у Fu может быть любые аргументы
>>1567073 > И нельзя написать protected: MySubsystem(int) = default; На самом деле ты можешь написать шаблонный конструктор, по аналогии с методом Create.
А вообще, подумай хорошенько, потому что выглядит как очередной велосипед. Что сделать-то хочешь?
>>1567092 >>На самом деле ты можешь написать шаблонный конструктор нет. потому что повторю - MySubsystem не должен знать о количестве аргументов его наследников. И у каждого наследника своя логика в конструкторе
>>что выглядит как очередной велосипед Велосипед чего?
В чем фишка? В коде есть основные системы которые за что-то отвечают - менеджеры(Foo1, Foo2, Foo3). В этом примере эти системы создаются в одном экземпляре - похоже на синглтон (но в реальном проекте Subsystem подключается к Context, и этих контекстов может быть также много, так что ни синглтон, ни тем более глобальные переменные тут не подойдут)
Далее я хочу получать доступ к этим системам через GetSubsystem(). (GetSubsystem<Foo1>()) GetSubsystem() должен выдавать мне объект класса из текущего контекста.
Subsystem - это просто базовый интерфейс который задает базовое поведение системы и ее привязку к контексту. Чтобы не копипасить кучу кода инициализации.
При этом - этот код - библиотечный, то есть я не знаю сколько будет этих классов Foo. Какие у этих классов будут аргументы и т.д.
Код уже работает, но есть архитектурные проблемы: - пользователь этого кода может не читать документацию и вызвать коструктор вручную (а не через Create()) - это ошибка. - (хотелось бы что-то сделать чтобы не писать вручную все эти Destroy() - но идей пока нет)
Еще раз повторю - почему не сделать тупо все это в конструкторах - потому что слишком дохрена копипасты, и потом - этот констуктор надо где-то вызвать, то есть надо где-то создать переменную, как-то ее привязать к текущему контексту чтобы память не потекла... короче такое решение хреновое.
- есть контексты (context). в любой момент времени активен только один контекст (но он может передать активность другому) - к этим контекстам привязаны подсистемы (subsystem) - подсистемы должны быть правильно инициализованы. Отложенная инициализация по вызову не пойдет - подсистемы должны инициализироваться при старте, а не при первом вызове (потому что там тяжелый код чтобы его во время основной работы вызывать) - и да, подсистемы могут не проинициализоваться - но это не является ошибкой (и тем более не исключение) - то есть даже при неиницилизированной одной системе всё остальное должно работать (кроме доступа к этой системе) - в любом месте кода должен быть доступ к нужной подсистеме активного контекста (GetSubsystem())... При этом я должен получить доступ только к самой подсистеме, а не всем системам что есть (это уже будет узел в лапше - не надо такого) - должна быть возможность добавлять произвольное количество подсистем. Интерфейс подсистемы по всем законам ООП не должен знать ничего о том кем будут его наследники.
>>1567130 Сложно запретить пользователю создавать объект, если он конструктор объявил public. Можно попробовать передавать первым параметром в конструктор Subsystem какой-нибудь объект-пустышку, которую пользователь не может создать, но тогда ему нужно будет прописывать в конструктор какой-то левый параметр, иначе сам не сможешь создать. Проще писать в доках, чтобы руками не создавали или делали конструктор protected
>>1567306 Тут есть нюанс: не обязательно эти методы будут встраиваться. Это будет зависеть от настроек компилятора. На этапе линковки уже может либо произойти встраивание, либо просто линкер выкинет все определения этого метода из единиц трансляции, оставив только одно.
>>1567359 Если обобщать то для членов-функций действуют те же правила, что и для свободных функций. Ты можешь в .h файле разместить определение свободной функции, пометив его inline. В зависимости от настроек компилятора будет сделано либо встраивание этой функции, либо на этапе линковки выкинутся все определения за исключением одного единственного.
>>1563540 "срезы" строк - std::string имеет доступ по индексу и функцию-член substr но вообще то std::string - контейнер, предполагается работа с ним через итераторы и алгоритмы стандартной библиотеки шаблонов
>>1567789 > Надо везде писать какое кресты сложное говно и продвигать для обучения в вузах питон. Меньше крестовиков - больше спрос - больше зп. Больше вкатывальщиков в говноязыки - меньше ЗП в говноязыках - больше специалистов с опытом перекатываются в плюсы - меньше ЗП у существующих специалистов
>>1566372 Наверное тебе в ПТУ сказали, что сложение указателя с числом это прибавление к адресу числа*(размер указываемого типа), поэтому ты думаешь что разность между указателями должна быть определена как разность между адресами. Но в ПТУ тебе напиздели про то, что такое сложение указателя с числом.
Лол, думал щас libpng прикручу быстренько, чтобы картиночку сохранить, а у там них обработка ошибок при помощи setjmp блядь! Наркоманы ебучие. Так и представил, как я щас посреди всей хипстоты с эксепшенами и смартпоинтерами ебашу setjmp.
>>1567860 Сложно и трудоёмко. Проблема в том, что надо как-то портировать логику сингловой игры на сервак. Обычно юзают один из трех подходов: 1. тупая трансляция, либо вообще p2p - клиенты договариваются между собой, вся логика работает на них самих. Открывает путь читерству, но работы намного меньше. 2. (частично) эмулировать логику клиентов на серваке - трудоемко, надо много реверсить и отлаживать. Будет много багов и несоответствий. 3. Гонять несколько клиентов на серваке/серваках, по одному на одного игрока в матче. Работы меньше, эмулировать ничего не надо, читерить сложней, но мощностей надо дохуя.
Общий принцип такой 1. реверсишь игру, находишь что надо хукать и дёргать, чтоб ей управлять 2. пишешь клиентскую часть, которая берет под полный контроль процесс игры и коммуницирует с сервером 3. пишешь серверную часть, одним из трех подходов выше.
>>1567984 Спасибо за ответ. Мне кажется напиание сервера не самая сложная задача. Для меня сейчас выглядит непонятным как, например отрисовать человека. Вот я получил от клиента сообщение о том, что он хочет заспавнить на таком месте такого юнита. Как мне это сделать? Потом же эти юниты должны взаимодействовать с моими. По сути клиент берет на себя задачи, которые обычно делает бот. Похоже на модоелсто. Где взять инфу по этому поводу? Хотелось бы на примере увидеть работу
>>1568010 >Мне кажется напиание сервера не самая сложная задача. Как раз написание сервера и реверсинг игры это самая трудоёмкая задача. Хукать игру много ума не надо. >Вот я получил от клиента сообщение о том, что он хочет заспавнить на таком месте такого юнита. Как мне это сделать? Надо пользоваться логикой самой игры и дёргать её когда тебе надо. Отреверсить игру (читэнжином, отладчиком, дизассемблером и т.п., туториалов миллион, в основном на читерских сайтах, как правило динамический анализ и проход по структурам будет быстрей дизассемблинга), и найти внутри неё стабильный адрес (или сигнатуру) функции спавна юнита. Это делается сложнее чем кажется, ибо надо 100% убедиться что это именно функция спавна юнита, это может быть совсем не очевидно. Затем внедрить код клиента внутрь процесса игры (техник миллион), и вызывать эту функцию когда тебе надо. Это уже дело техники. На самом деле всё зависит от устройства конкретной игры, там может быть не функция спавна, а надо произвести кучу действий, или еще что-то сделать. Также можешь зайти в asm-тред.
Наконец закончил делать сапер. На все про все ушло меньше 300 строк. Хотя вышел лютый говнокод, вся программа разместилась в классе mainwindow. Буду теперь приводить к удобоваримому виду. по началу хотел сделать, чтобы мины генерировались так, чтобы не было возможности зайти в тупик, но это слишком сложно
Анон, у меня к тебе сейчас три очень серьёзных вопроса: Когда я пишу cout << "huj"; , компилятор автоматически создаёт массив, в котором последовательно содержатся коды символов h, u и j? Или нет? Когда я пишут cout << this << "huj"; , компилятор выводит адрес самого первого символа строки? Адрес чего выводится, когда я пишу cout << this; ?
>>1568663 Сам и читай, а потом расскажешь, как там случай на картинке объясняется, у тебя же дохуя свободного времени. А я чисто поинтересоваться зашёл, а не книги твои дурацкие читать.
>>1568635 Фигня в кавычках - строковый литерал. Это область памяти только для чтения, считай, что это тип const char*. >cout << this << "huj"; Оно выведет адрес объекта, в методе которого написано такое (в виде 0x1234) и после него допишет huj. >cout << this; >адрес объекта, в методе которого написано такое
Совет про книгу хороший. Проблема не в том, что ты не понимаешь конкретно этого, а в отсутствии общего понимания что тут происходит - по крайне мере так оно выглядит судя по вопросу. С сотворением общей картины поможет только книга, а ответы на вырванные из контекста вопросы тут лишь навредят.
>>1568674 Ты не понял, мне вообще эти твои книжки не нужны. Когда каникулы закончатся и пройдёт сессия, я просто спрошу у препода, который мне всё это разжуёт и в рот положит. Если, конечно, мне тут то же самое не сделают раньше того времени. Вопрос этот для меня не столь критичный, так что отвечать или нет — твоя воля.
>>1568703 Мне это просто внезапно стало интересно, но незнание всего этого мне прямо сейчас никак не помешает. Хотя хотелось бы, чтобы анон просто по-человечески по каждому пункту ответил хотя бы парой слов по теме, а не ссылался на какие-то там книги. Это же тред для обсуждения языка, а не тред ссылания на литературу по каждому вопросу. Ну неужели там так долго надо объяснять?
>>1568715 Да, блядь, это фундаментальные особенности языка. Если ты не хочешь это понимать и читать книгу - то съёбывай из своей шараги в поварское училище и пеки кексы. Хотя там тоже желательно книги с рецептами читать.
>>1568870 У меня душа лежит к выпеканию аж пиздец, только после нового года дважды выпекал охуенные овсяные печеньки, которые похвалила вся моя родня и какой-то знакомый моей мамки. Но в наше городское поварское училище был конкурс из дохуя двоечников на одно место, так что чтобы дома как сыч не сидеть и не сойти с ума от одиночества, пришлось поступить в универ учиться печь говнокод. Ты прям пиздец угадал мои основные интересы.
>>1568886 И да, конечно же я попросил сравнить мой код с кодом с сайта, чтобы увидеть здесь в мой адрес что-то вроде "малаца, хорошо сделал" и потешить своё ЧСВ.
>>1568890 Теперь поменяй int на какой-нибудь char[8192], сделай функцию, которая внутри себя создаёт список из миллиона-двух элементов и вызови ее несколько раз. А потом расскажешь, что нагуглил, чтобы исправить. Ебать как я люблю названия переменных.
>>1568926 Да ладно нормальные названия. Даже с префиксами по кодстайлу, кек. Нормальная лаба, я бы сказал. Ни к чему не приебаться, кроме того что память течет. нахуй ты в ideone джаву выбрал-то? Main.java:1: error: illegal character: '#' #include <iostream>
Сап, где можно потренироваться с STL? Ну типо задачи под него заточенные. А то так получается что могу реализовать свой стек/очередь, но про встроенные вечно забываю.
>>1569094 Самое простое: в тот момент, когда тебе нужно что-то сделать хитрое, подумай: "а нет ли этого в STL?" и иди курить cppreference.com или cplusplus.com. Скорее всего ты найдешь там ответ на свой вопрос.
А так - можешь cookbook от Яна Галовица прочесть. Там не всё разобрано, конечно же, но примеры полезные есть. Например, что мне доставило, перенаправление cout в файл в нужной области видимости.
Подскажите, чому я не вижу проперти checked у QPushButton-а? Не могу на него сослаться, ругается, что нет такого свойства. Хотя оно должно быть, т.к. QPushButton наследует у QAbstractButton-а.
>>1569925 Хочу сделать массив с состояниями кнопок. Пишу что то типа buttonsState->append(&button->checked) а он мне говорит, что у button нет свойства checked.
>>1569942 Ты хочешь хранить у себя указатели/ссылки на свойство, чтобы потом его можно было читать/менять? Они же для того и придумывались, чтобы ты этого сделать не мог. Если уж так хочется, храни коллбеки на метод isChecked...
недавно понял что каким-то образом Qt и др идэ как-то понимают как собрать проект из нескольких cpp файлов, и как-то так у них получается не нарушать поля видимости.
>>1570694 Что по-твоему сложного в вызове компилятора для каждого из файлов? > как-то так у них получается не нарушать поля видимости. За этим должен следить ты, а не компилятор
>>1571020 Ты о чем вообще? Или таблетки опять забыл выпить?
>>1571021 Тогда сорян, с деструктором верно. >>1571025 Детектор нужен, простыми словами, если где-то есть динамически выделенная память, иначе все ок. Или если необходима какая-то особенная логика, чекни std::shared_ptr.
>>1571146 Детектор моего скудоумия, так как я и не понял анона, который на меня наехал, и набрать нужное слово не смог.
Деструктор, конечно же.
>>1571020 >а ты тут только про хуи пишешь. Так сказано же >Лабы идут нахуй Потому я тебе хочу не сразу все рассказать и помочь, а направить на нужную мысль.
>>1571175 Да, это функция, которая будет вызываться при выходе из области видимости(можно и руками, но я не знаю, когда это в самом деле может потребоваться). То есть для class C { C() = default; ~C() { std::cout << "\ndtor"; } }; int main() { { C c; //Тут будет вызван деструктор } std::cout << "\nend"; return 0; } Вывод будет dtor end Хотя деструктор ты руками не звал.
И да, если ты для переменной внутри класса выделил память через new - то ее нужно освободить через delete.
>>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. Больные ублюдки.
Зачем нужны геттеры и сеттеры, если переменные в поле видимости всего класса можно сделать приватными, а в публичной части просто вызывать их из функций? Тогда ведь в маин через точку будут видны только функции в паблике.
>>1571351 У тебя оператор присваивания вызывается и в случае a = b + c, и в случае a = b; a+=c. >Зачем временный объект А как ты себе представляешь колбасу из a = b + c + d + e + f? Ты уверен, что во всех абсолютно случаях разница во времени будет такая же? Это у тебя такой класс, в случае другого класса значения могут совсем по-другому отличаться. Ты в дебаге проверяешь время работы? Если да - то молодец, ага.
>noexcept Затем. Компилятор для реализации перемещения должен быть уверен, что конструктор не выкинет исключение. А если ты не указываешь это явно, проверять он не обязан. >Наоборот Ты оптимистичен, компилятор и комитет - пессимистичен. Тебя потом набутылят за ущерб компании в случае багованного кода, а им спасибо скажут: "ух как предусмотрели, мы это ещё на стадии компила/тестирования отловили!" Да и слово except в C++20 вроде как deprecated будет.
>>1571395 >как ты себе представляешь колбасу И то верно. Сказать как особый случай, особую оптимизацию для случая из двух слагаемых язык не поворачивается. Ну и ладно, не очень то и хотелось. Написал же, что с -O3.
Лучше бы слово try deprecated стало - бесполезная концепция и вроде как не только я её избегаю.
>>1571382 Но ведь ты только что и описал геттер. >>1571384 Тебе где-то в программе например нужно просто получить значение из поля класса, ты же не каждый раз его задаешь.
>>1571456 >я её избегаю Ну и напрасно. Если эксепшенами не пользоваться, то можно сразу половину языка депрекейтить. C++ без них вообще слабо раскрывается.
>>1571321 В том, что это гораздо более мощная концепция, чем какой то номер элемента. На какой номер элемента по твоему указывает итератор создаваемый back_inserter ом?
>>1571841 back_inserter наряду с хуевой тучей других inserter-ов - просто костыли для обхода соглашения, что алгоритмы из стандартной либы не могут изменять размер контейнера. Соглашения, которое сделал сам комитет, а потом такой "бля а как нормально коллекции тогда юзать? На нах вам инсертеры", и это все при том, что в ассоциативных контейнерах число элементов уже может изменяться. Весело пиздец, хочу чтобы стратусрус стал моим дилером
>>1568667 >>1568669 >spisok >golova >etot >uzel >stek >... >А я чисто поинтересоваться зашёл, а не книги твои дурацкие читать. Тред 1С-параши дальше по коридору, уебок.
>>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.
Аноны, как вкатиться? Хочу выучить основы и поюзать на практике. Что можно начать делать чтобы постепенно поднять лвл до джуна, например? Стоит ли пилить какой-то проект или лучше задрочить книжки и решать тамошние задачки?
>>1572679 > А массив твой типа можно? Почему нет? > Используй вектор тогда. Использую почти всегда, но тут мне кажетсч будет быстрее массив, тк очень много обращений к его элементам > span - это обёртка над указателем, почитай cpp core guidelines Прочту
>>1572689 >будет быстрее массив, тк очень много обращений к его элементам А есть разница какая-то с вектором? В обоих случаях ты прибавляешь смещение и обращаешься по указателю. У тебя там int✲✲ ? Лучшее что можно сделать, это заменить его на int✲, и обращаться как a[y✲dx+x], чтобы было только одно разыменование (и чтобы все данные лежали в одном месте и хорошо умещались в кеш), но это работает только в случае прямоугольных массивов, естественно. >>1572532 >В аргументе я должен указать тот же тип, что и a Конечно, int✲✲.
>>1572689 > Использую почти всегда, но тут мне кажетсч будет быстрее массив, тк очень много обращений к его элементам Твоё "кажется" ничего не стоит, пока сам не проверишь. От результатов можно охуеть, даже если написать так, как анон выше (через одномерный массив). Советую посмотреть доклад Александреску, вроде называется "speed is found in minds of people"
анончики, помогите, молю Решить задачу для динамического массива, не используя индексацию. Найти сумму нечетных элементов, стоящих на нечетных местах (то есть имеющих нечетные номера). Вывести адрес максимального элемента исходного массива. Максимально не понял это задание. На вас вся надежда
>>1572776 >не используя индексацию Я тоже не понял что это значит. Использовать *(a+i) вместо a, лол? Но это же смешно просто. Я бы написал с индексацией, так бы принёс и потом спросил бы что тут подразумевалось.
В статье на хабре (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, и одного указателя на одну из этих таблиц в экземпляре структуры более чем достаточно для полиморфной работы этих методов. Не вижу в каком месте деструктор или конструктор могут неявно выделять какую-либо ещё память.
Может, так чуть понятнее станет. 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 Из деструктора можно бросать и даже ловить. Если знаешь, что делаешь. А виртуальные функции и из конструктора не очень удобно вызывать, но это в силу особенностей реализации этих самых виртуальных функций.
Аноны, сап, есть такой вопрос. Как объявить переменную?
Нет, я знаю, что надо написать "int a;", и.. че? Где-то там выделилась память. Я понимаю, что я могу манипулировать с этим участком памяти через "a", но зачем мне это делать, когда я не знаю для чего мне эта переменная нужна? Я собираюсь записывать в эту переменную какие-то биты, ок, но для чего?
Я себе это представляю так, что для начала мне нужно что-то сделать, а потом, когда мне нужно будет использовать память, я ее использую.
Но тогда надо начинать с чего-то другого, верно? Но нельзя начать с чего-то другого, так как чего-то другое требует для манипуляции чего-то того, чего нет (переменной). Такой замкнутый круг. Как решать задачу в итоге?
> Я себе это представляю так, что для начала мне нужно что-то сделать, а потом, когда мне нужно будет использовать память, я ее использую. Код обрабатывает данные. Нет переменных - нет данных. Нет данных - нет смысла писать код. "Что-то сделать", впрочем, можно: объявить пустую функцию ничего не принимающую и ничего не возвращающую, а затем её вызывать, сколько хочешь.
>>1574714 >объявить пустую функцию ничего не принимающую и ничего не возвращающую, а затем её вызывать, сколько хочешь. Хм, интересное решение. Буду пока придерживаться этого варианта, если что пойдет не так или появится лучший - сообщу
>>1574779 Если бы. У тебя там неявный int, так что данные уже есть, хоть и мусор. Перепиши хотя бы с void. О, ещё кое-что можно: - пустой оператор ';' - goto метка;
>>1574699 Нет, дело даже не в этом. Если ты написал int a и больше ничего, то память не выделилась. Вообще нихуя не произошло! Это же объявление, блять, оно не генерирует никаких инструкций. Вообще, если ты о такой хуйне задумываешься, осваивай ассемблер. Там сразу станет ясно, кто такой стек, кто такая переменная, функция и прочие не очень понятные вещи.
> интересно посмотреть как ты вызываешь метод объекта, который еще не создан Что значит создан? Память аллоцирована, просто вызывается конструктор, то есть this вполне себе живой указатель. В каком состоянии таблица виртуальных функций мне неизвестно, не знаю, что там в стандарте пишут. GCC, как видно, успевает с ней поработать до входа в тело конструктора.
Ку девсы, пишу сервак на плюсах. Он принимает от клиента сообщения и выполняет соответственный код. Принимаются сообщения в роде "ABC_CMD_0", "ABC_CMD_1" и тп. Как лучше парсить сообщения от клиента? Есть ли паттерны, чтоб решить эту задачу более разумно, а то не охота чекать руками if-ми, лмао. Thx.
>>1575214 Блядь, так это и есть _не_ виртуальный вызов. Вот если бы у тебя конструктор базового класса вызвал метод наследника, тогда бы был виртуальный вызов.
Сап, подскажите пожалуйста как создать массив на 210^9 элементов? пробую так - вылетает, по другому тоже не получается bool b = new bool[2000000002]; delete[] b;
>>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, в другой без, оба примера работают одинаково вроде.
Привет, анон. Подскажи мануал по Eclipse IDE 2019-12. Пытался написать в нем "Привет, мир!" на яве, но он выдаёт ошибки приклейтед (symbol "символнейм" could not be resolved). В онлайн компиляторе всё работает нормально, как заставить эклипс стакаться с явой 13.0.2?
>>1576523 > на яве Что? На яве? У тебя же крестовый код. На яве, если не ошибаюсь, тебе нужно создать класс и в нем сделать метод - и это будет минимальным ява-кодом.
Умоляю подскажите, можно ли как то реализовать через хук что бы нажатие кнопки Z нажимало Z один раз(!) как обычную кнопку и делало что то дополнительно на, например переменную меняло.
В моем случае, когда я на хук Z делаю кейборд эвент Z - оно проспамливает в милисекунду несколько раз. Как мне отделить виртуальное нажатие кейбордэвента от реального физического?
>>1554355 >Однако "оптимизацией" подобные выкидывания, переписывания и упрощения - не являются. Однако являются рефакторингом. Если оптимизация нужна для того, чтобы компьютер быстрее справлялся с кодом, то рефакторинг нужен, чтобы с кодом быстрее справлялся человек. Мне кажется ты и близко не понял на что ответил.
мимонуб, читавший листавший этот ваш рефакторинг и прочие чистые коды
>>1554724 Упоминание эффекта Даннинга-Крюгера выявляет находящихся под ним ещё надёжнее. А всё потому, что впоследствии оказалось, что сами учёные подошли к исследованиям спустя рукава и впоследствии их исследование было пересмотрено и подвергнуто критике.
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред:
• (OP)