Этого треда уже нет.
Это копия, сохраненная 18 февраля 2020 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
2 1552808
Вопрос по qt. Есть класс Mainwindow, в нем я создаю указатель на кнопку и в конструкторе класса делаю так

> button1 = new QPushButton("Button", this);


Но проблема в том, что кнопка не активна. Хотя если создать кнопку отдельно

> QPushButton sd("df",&w);


Где w экземпляр класса, всё будет работать. Почему?
3 1552851
Как унаследовать все конструкторы базового класса, если в производном только добавляются новые методы?
4 1553017
>>52851
Никак.
5 1553059
>>52851

>унаследовать


>конструкторы


Ты ебанутый?
6 1553068
>>53017
То есть мне писать десяток конструкторов со всем списком параметров, а потом через двоеточие еще раз делать это?
Безымянный.png47 Кб, 543x821
7 1553082
>>53059
Что не так?
8 1553099
>>53082
Где там наследование то? Явная инициализация базового класса с аргументами из конструктора класса-наследника
9 1553100
>>53082
Охуеть, до чего дошёл прогресс, я и не знал о такой возможности

мимо
10 1553116
>>53099
Ай блять я долбоеб слепошарый
11 1553123
Threads только в 2011 году появились? Ахах
12 1553124
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)));

13 1553136
>>53123
А вот Sockets не появились до сих пор.
14 1553166
>>53123
String.split/join нет даже в 2020
15 1553183
>>53166
Ебать! Это пиздец!
16 1553194
я же говорил тред сам перекатится
17 1553269
>>53124
Если слот к сигналу не подключился, сообщение об этом выводится куда-то во время выполнения. Смотри вкладку Output внизу в Qt Creator или запускай в консоли (в настройках проекта, Settings слева, можно выбрать галочку запуск в терминале).
18 1553280
>>53124
А ещё попробуй по-современному подключать. https://wiki.qt.io/New_Signal_Slot_Syntax/ru
19 1553308
>>53166
А вот в boost...
20 1553325
>>53308
Огромный комбайн, который хуй пойми как ставить. Пока разберёшься, успеешь 10 раз написать свои строки.
21 1553411
>>53325
boost::tokenizer, к примеру, header-only библиотечка из 3х файликов..
22 1553450
>>52778 (OP)
Помогите мне разобраться пожалуйста.Я устанавливал qt 5.14.0 для андроид на ubuntu 16.04 и использовал ndk r20. Я следовал инструкциям в этой статье

>https://wiki.qt.io/Android


После того как я запустил ./configure вот какой мне вывел результат. Объясните пожалуйста, как обойти предупреждения насчет кросс-компиляции и насчет LLVM_INSTALL_DIR
23 1553454
>>53450
Есть какая-то причина, по которой ты не используешь установщик, а собираешь из исходников? В установщике можно выбрать андроид платформы. https://www.qt.io/download внизу open source.
image.png76 Кб, 1224x398
25 1553460
>>53456
вроде как из-за того что в ndk 20 убрали поддержку gcc toolchain, надо компилить исходники с помощью кланга, насколько я понял из этой темы https://forum.qt.io/topic/95104/qt-creator-android-clang. Поэтому я думаю, лучше я скомпилю qt из исходников.
26 1553473
>>53460
Я это понял так: надо использовать clang для сборки исходников, потому что больше нельзя собрать из исходников с помощью gcc. Но зачем тебе вообще собирать из исходников? Попробуй, в общем. Я собирал проект с ndk-20 без ручной сборки qt.
27 1553476
>>53473>>53473

>Я это понял так: надо использовать clang для сборки исходников


то есть в ./configure нужно прописать -platform linux-clang? И ты собирал проект на qt 5.14?
28 1553485
>>53476

> то есть в ./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
29 1553488
>>53166
Таки split же подвезут в 20 стандарте.
Источник: лекции от PVS Studio, лекция про 20 стандарт.
30 1553489
>>53488
Да и stringstream легко справится с этой задачей.
31 1553494
>>53489
Насколько легко?
vector<string> s = stringstream("abc def ghi").split(" ");
Справится хотя бы на таком уровне? Или нужно будет писать 20 строк и инклудить какие-то странные классы?
32 1553496
>>53494
std::string text = "Let me split this into words";

std::istringstream iss(text);
std::vector<std::string> results(std::istream_iterator<std::string>{iss},
std::istream_iterator<std::string>());
33 1553500
>>53496
Спасибо.
34 1553522
воняю как боров
photo2019-10-2220-30-54 (2).jpg28 Кб, 646x468
35 1553526
Поясните за эту хуйню. Как это работает? https://wandbox.org/permlink/bdVTZHXMQ3vf5f0e

Почему раскрытие идёт корректно только внутри таких вот скобок, но не внутри std::invoke? Например, std::invoke(&f, std::forward<V>(v)..., cap) не сработает, потому что не сможет найти подходящий overload. Это потому, что не существует прототипа, который бы раскрывал variadic pack?
36 1553542
>>53526
Про tuple не слышал?
37 1553544
>>53522
Пытался выучить кресты за 21 день?
38 1553545
>>53124
Проблема оказалась в том, что move не слот как я понял, при выпадении листа методов слоты имеют значек с зазубринами а просто методы прямоугольник
39 1553548
>>53544
пытался батюшка
40 1553677
>>53526
Знаешь как эта хуйня (...) работает? Она в данном случае указывает, какое именно выражение копипастится, т.е. раскрывается.

Вот смотри, если написать внутри инвока оно раскроется так.
(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))
41 1553683
>>53677
Оно то да, но это разные вещи
42 1553686
>>53683
>>53542
Хм, либо я ебусь в глаза, но причем здесь туплы?
43 1553774
Что используется для вывода сообщений у c++? На шарпе я всегда messagebox использовал, а тут не знаю даже.
44 1553798
>>53774
Можешь и здесь использовать MessageBox если ты упоротый. Ещё можешь посмотреть в сторону Qt.
45 1553799
>>53774
В С++ CLI доступно всё то же, что и в шарпе.
46 1553814
>>53798
Почему упоротый сразу?
47 1553841
>>53799
C++/CLI это альтернативный синтаксис для шарпа, несовместимый с экосистемой крестов.
48 1553864
>>53814
Потому что WinAPI упорот.
49 1553922
Qt еще и ошибки детектить не способно. Программа неожиданно завершилась и иди гуляй. Заебись.
50 1553925
>>53922
А причём тут Qt?
51 1553926
>>53922
Как говорит луркморье, на говне сметану не сделаешь.
52 1553929
>>53922
Вероятно, это значит, что исключение выбрасывается внутри слота.
Казантип Сосет 53 1554001
Помогите, пожалуйста, составить программу или переделать мою, на кону стоит зачет по программированию и анальная девственность.
Условие: Записать элементы массива 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;
}
Казантип Сосет 53 1554001
Помогите, пожалуйста, составить программу или переделать мою, на кону стоит зачет по программированию и анальная девственность.
Условие: Записать элементы массива 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;
}
54 1554060
>>54001
-> С тред, причем тут кресты
55 1554066
>>54060
Как же, он ведь аж iostream заинклудил.
56 1554137
Как сделать свой класс атомарным? У меня есть класс, которые может суммировать строки, но при этом он должен быть однозначным в многопоточности. Реализовать внутри очередь?
57 1554158
>>53841
Message Box можно и с ассемблера вызывать.
59 1554184
Посоветуйте, плес, задачек с ответами, чтобы ООП надрочить.
60 1554185
>>54001
ну кстати чел у тебя почти все правильно, надо только "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_];"
61 1554196
>>54184
Наследование квадратов от прямоугольников.
62 1554212
>>54137
Что значит "атомарный класс"? Атомарными могут быть только операции. Добавь мютексы в свои методы
63 1554222
>>54212
ну да, операция сложения строк. С мютексами насколько я понимаю будет долгая задержка, если операция длится долго.
64 1554251
Вопрос по qt. Возможно ли QTreeView сделать чтобы итем верхнего уровня имел 1 столбец, а его дети 2?
65 1554275
Ананасы, поясните за аллокатор (кастомный).
Вот, к примеру, он выделяет память кусками.
А как быть есть подо "что-то" не хватит выделенного куска памяти. Например, текстура.
Как быть тогда? Выделять несколько чанков под неё?
66 1554285
>>54222
Так эта твоя операция навряд ли будет длиться долго, но суть не в этом.
Покажи сигнатуру метода, потому что не совсем понятно, как класс должен строки складывать.
67 1554294
>>54184
Сделай своё api для гуи. С кнопками, ползунками и надписями, чтобы все элементы интерфейса взаимодействовали друг с другом через виртуальные методы или ещё как и могли в нажатия мышкой, клавиш, колёсико.
image.png6 Кб, 245x125
68 1554306
У меня есть луп выполняющий действие каждые 2 сек.
У меня есть кнопка Х для выхода из лупа.

Можно ли как то выйти из лупа быстрее, чем происходит одна итерация (2 сек)?
69 1554308
>>54306
Например, во вложенном цикле 20 раз спать по 100 мс и затем проверять нажатие.
70 1554314
>>54308
Типа проверять 20 раз между каждым 100мс сном?
71 1554315
>>54306
Ну будьте же людьми, напишите нормальный цикл обработки сообщений и ловите WM_KEYDOWN
image.png30 Кб, 769x409
72 1554322
>>54184
ооп это парадигма для фабричного программирования, то есть бля берется проект в вакууме, описывается задание для старшего технаря, тот рисует облачки со стрелочками(ну вы знаете), отдает эти облачки со стрелочками младшим обезьянкам и следит за ними как они кодят.

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

например тут писали про квадраты из прямоугольников. ну да это очень простой и наглядный пример. но бля задать прямоугольник можно несколькими способами https://gamedev.ru/terms/AABB .

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

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

я работал с таким идиотом, ну фанатом uml облачек и архитектуро бреда. я просто брал его классы, переписывал и они получались короче либо вообще исчезали, так как мне нужна была причина это делать, я еще сверху дописывал фичи или находил баги. даже ебаное ооп я понимал лучше него. но он отплясывал перед менеджерами и руководителями, которые в свою очередь с большой вероятностью идиоты тоже, так что учиться надо отплясывать в первую очередь, а код писать не сложно.
image.png30 Кб, 769x409
72 1554322
>>54184
ооп это парадигма для фабричного программирования, то есть бля берется проект в вакууме, описывается задание для старшего технаря, тот рисует облачки со стрелочками(ну вы знаете), отдает эти облачки со стрелочками младшим обезьянкам и следит за ними как они кодят.

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

например тут писали про квадраты из прямоугольников. ну да это очень простой и наглядный пример. но бля задать прямоугольник можно несколькими способами https://gamedev.ru/terms/AABB .

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

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

я работал с таким идиотом, ну фанатом uml облачек и архитектуро бреда. я просто брал его классы, переписывал и они получались короче либо вообще исчезали, так как мне нужна была причина это делать, я еще сверху дописывал фичи или находил баги. даже ебаное ооп я понимал лучше него. но он отплясывал перед менеджерами и руководителями, которые в свою очередь с большой вероятностью идиоты тоже, так что учиться надо отплясывать в первую очередь, а код писать не сложно.
73 1554330
>>54294

>Сделай своё api для гуи.


Плохой вариант. Гуй на ООП не очень хорошо ложится. Компонентный подход гораздо удобнее.
74 1554331
>>54330

>Все GUI фреймворки построены с использованием ООП


>Шкальник с двача

RXv8b.png44 Кб, 300x406
75 1554332
>>54251

>Возможно ли QTreeView сделать чтобы итем верхнего уровня имел 1 столбец, а его дети 2?


Можно сделать, чтобы он отрисовывался на два столбца. Но надо писать свою модель. Посмотри, как у них Property Browser сделан.
76 1554334
>>54331

>Все GUI фреймворки построены с использованием ООП


Далеко не все, ImGui, например. А те, что написаны, начинали писаться в 90-е, когда ООП было модно. Например swing на джаве - образцовый пример, когда ООП только мешает. Там заебешься какую-нибудь кастомизацию делать, хотя ООП тут вроде должно помогать.
77 1554335
>>54315

>напишите нормальный цикл.


>ловите WM_KEYDOWN.


И как это тебе поможет выйти из цикла, который с задержкой в 2 сек, быстрее ?

Зачем заморачиваться дополнительно ещё и ловлей из кучи совершенно не нужных сообщений нажатие на кнопку, с которым и так нету никаких проблем ?
От того, что ты будешь разгребать все сообщения, в поисках нажатия, вместо того, чтобы взять готовое - ничего не поменяется.

Вот это решение >>54308
скорее всего, оптимально.
78 1554344
>>54335
WM_TIMER, WM_QUIT
79 1554347
>>53922
Оказалось, что после того как я удалил присвоение указателя, действие с ним осталось. Странно что это даже не подсветилось.
80 1554348
>>54334
Immediate Mode Gui (включая ImGui) фреймворки сделаны специально для игр и подобных им вещей, которые работают в непрерывном цикле "обновление состояния-отрисовка" (а не по типичной для десктопных приложений событийной модели). Они очень примитивные и ничего серьезного ты на них не сделаешь.

>Там заебешься какую-нибудь кастомизацию делать, хотя ООП тут вроде должно помогать.


Без ООП ты еще больше заебешься при попытке написать что-то мало-мальски сложное.
81 1554349
>>54348

> Они очень примитивные и ничего серьезного ты на них не сделаешь.


Редактор Unity3d написан на immediate mode фреймворке. Это достаточно серьезно?

>Без ООП ты еще больше заебешься при попытке написать что-то мало-мальски сложное


Emacs, например, можно считать "мало-мальски сложным"? ООП там нет.

Я вообще не против ООП, тем более, если оно встроено в язык. Мне не нравятся практики из 90-х, когда в том же гуи все наследуется от супержирного базового виджета, а весь функционал приколочен гвоздями и инкапсулирован так, что поменять что-то можно только через систему костылей.
82 1554351
>>54349

>Редактор Unity3d написан на immediate mode фреймворке. Это достаточно серьезно?


Я уверен, что они поверх него навертели ООП врапперов

>Emacs


У емакса считай что гуи вообще нет

>Мне не нравятся практики из 90-х, когда в том же гуи все наследуется от супержирного базового виджета, а весь функционал приколочен гвоздями и инкапсулирован так, что поменять что-то можно только через систему костылей.


Оно так неспроста и лучшего способа делать гуй пока не придумали
83 1554355
>>54322

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


В классе десять методов, а нужен только один - ну как не выкинуть девять не нужных, написав класс из одного метода ? - понимаю.
Или, так и хочется выкинуть весь класс, а нужный метод оформить в виде функции, да ?

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

Недостатки :
Лишний в ней, "мёртвым грузом" заведомо не используемый код - не способен помешать, ведь он, тупо, не используется, а в адресное пространство программы загружаются только хотя бы однажды вызванные из класса функции - не используемые при работе программы функции так и пролежат на диске в её файле.
Да, размер файла программы они увеличивают, но это не сопоставимо с неуклонным ростом размера дисков.

Преимущество :
"Лишний" код в классах, включая сами лишние методы, не мешают разработке, так как они инкапсулированы в отдельный файл, а имена методов и свойств не пересекаются с именами функций и переменных кода, который пишет разработчик, так как находятся они в другом пространстве имён, начинающимся с имени класса.

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

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

В остальном, как тут не отпинывайся от ООП, оно неизбежно : так же протестовали и против высокоуровневых языков - сейчас даже микроконтроллеры программируются на них, добрались, со всеми тяжкими, классами, скрытыми внутренними функциями языка и прочее.
83 1554355
>>54322

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


В классе десять методов, а нужен только один - ну как не выкинуть девять не нужных, написав класс из одного метода ? - понимаю.
Или, так и хочется выкинуть весь класс, а нужный метод оформить в виде функции, да ?

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

Недостатки :
Лишний в ней, "мёртвым грузом" заведомо не используемый код - не способен помешать, ведь он, тупо, не используется, а в адресное пространство программы загружаются только хотя бы однажды вызванные из класса функции - не используемые при работе программы функции так и пролежат на диске в её файле.
Да, размер файла программы они увеличивают, но это не сопоставимо с неуклонным ростом размера дисков.

Преимущество :
"Лишний" код в классах, включая сами лишние методы, не мешают разработке, так как они инкапсулированы в отдельный файл, а имена методов и свойств не пересекаются с именами функций и переменных кода, который пишет разработчик, так как находятся они в другом пространстве имён, начинающимся с имени класса.

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

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

В остальном, как тут не отпинывайся от ООП, оно неизбежно : так же протестовали и против высокоуровневых языков - сейчас даже микроконтроллеры программируются на них, добрались, со всеми тяжкими, классами, скрытыми внутренними функциями языка и прочее.
84 1554358
>>54344
И как это применить ? - первое генерирует таймер, второе закрывает программу.
"Sleep(2000)" заморозила программу, может ты как-то хочешь дать ей отбой.
85 1554359
>>54351

>Я уверен, что они поверх него навертели ООП врапперов


Не навертели.

>У емакса считай что гуи вообще нет


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

>Оно так неспроста и лучшего способа делать гуй пока не придумали


Давно придумали, просто вынуждены использовать легаси родом из 90-х вроде Qt.
86 1554381
>>54355

>>ну как не выкинуть девять не нужных


когда там в С++ уже завезут =delete для своих методов а не только операторов и конструкторов/деструктора?
Чтобы я писал так:

class Foo
{
virtual void pina() {cout << "пора бухать";}
};

class Bar : public Foo
{
void pina() = delete;
};

Bar bar;
bar.pina(); <===== ERRROOOORRRR, НИЗЯ
87 1554386
>>54381
Тогда всё ООП с полиморфизмом идёт нахуй. Класс должен расширять поведение базового, а не заменять его.В теории
88 1554388
>>54386

>интерфейсы

image.png21 Кб, 491x316
89 1554392
>>54386
не идет, так можно делать. Можно удалять делать недоступным базовый функционал

И если в гламурных С#/Java это пофиг, то уж в С++ который весь такой под оптимизации - уже давно пора сделать какой-то механизм для гарантированного удаления говна на уровне компилятора.
90 1554405
>>54331

> Все жрут говно


> И ты жри


Классика же ну.
91 1554407
>>54386

> Тогда всё ООП с полиморфизмом идёт нахуй


Ого, а я вижу ты начал догадываться.
92 1554610
>>54381

>когда там в С++ уже завезут =delete для своих методов а не только операторов и конструкторов/деструктора?


Retarded? Ещё в C++11 завезли. Даже для free functions можно, не только методов.https://wandbox.org/permlink/ooDbZbcgXdKwD8sD
93 1554620
>>54610
Охуеть плюсы продвинулись. Может, ещё и рефлексию и lisp-стайл макросы добавили давно, просто никто не заметил?
94 1554626
>>54381

>class Foo


>{


>virtual void pina() {cout << "пора бухать";}


>};


>


>class Bar : public Foo


>{


>void pina() = delete;


>};


>


>Bar bar;


>bar.pina(); <===== ERRROOOORRRR, НИЗЯ


И без `void pina() = delete;` будет ERRROOOORRRR, НИЗЯ
95 1554631
>>54355
а еще я вносил серьезные правки в проект, и типа после моих правок одни баги исчезали и вероятно появлялись другие для меня не очевидные.

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

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

а на счет лишнего мертвого кода - а нахуй он нужен, он же все равно будет в системе контроля версий, так что можно удалить и восстановить по желанию. я думаю так, удалять такой код можно, что бы глаза лишний раз не мозолил. но я говорил не про неиспользуемый код, а про используемый раздутый говнокод.
96 1554659
>>54620
Рефлексия в С++26
image.png4 Кб, 272x101
97 1554661
>>54631
Пытаюсь разобраться с реализацией очереди массивом..
Сап, плюсики, подскажите пожалуйста что на пикрил происходит. Она же всегда 0 дает. Тогда зачем ? Более полная часть кода тут https://rentry.co/sourcecode/raw
98 1554670
>>54661
лабы идут на хуй, извини
99 1554671
>>54661
там какой-то код, который к С++ отношения не имеет. Или там пробелы пропущены в аргументах функций
100 1554689
>>54671

>Или там пробелы пропущены в аргументах функций


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

>>54670
У тебя конкретный вопрос спрашивют, а не просят зделоть, в прочем ты все равно нихуя не понимаешь
101 1554701
>>54661
там сыроватый код но логика определенная есть. под очередь выделяется память, допустим int[100]. изначально очередь пустая, по этому начало и конец очереди 0 0. добавляется элемент в очередь, конец становится 1. берется элемент из очереди и начало становится 1, как и конец.

после нескольких таких операций начало и/или конец могут выйти за границы куска памяти. код на пикриле как раз для защиты от этого.
допустим начало очереди на 98 элементе массива, я добавляю элемент и конец становится 99, я добавляю еще элемент и конец выходит за пределы массива, но память уже есть выделенная и можно просто начать залазить в начало массива. финт с остатком от деления общеизвестен, к n + 1 ты дописываешь (n + 1) % data.length и ты уже не выйдешь за пределы массива.

перепиши псевдокод for(i = 0, i < 100) { print(i % 10)} и посмотри что будет.
102 1554702
>>54689
а то, 6 лет плюсов, но нихрена не понимаю, конкретны ответ таков: ты тупой, не лезь в кресты
image.png120 Кб, 981x783
103 1554709
>>54702

>6 лет плюсов


пошли авторитетные аргументы

а у меня жопа толще, соси быдло.

Видел я вас таких, пиздят тудя сюда языком, а по-факту сами нихуя не понимают.

Алсо, я вообще мимиокрокодил.
104 1554710
>>54610

> Retarded?


Словил БАГРАТИОН почему-то.
105 1554718
>>54709
проходи, не задерживайся, если ты нормально код запостить не можешь, что с тебя взять? ты задаешь вопросы, но задаешь из без уважения
106 1554723
>>54709
я 10 лет кодю на разных языках и каждый раз трудно вчитываться в говнокод студентов, я >>54701-антон

на счет уважения сыглы, студенты должны страдать и пусть они вообще нахуй идут, я ответил только потому что мне скучно было
107 1554724
>>54718

>если ты нормально код запостить не можешь


Какой код, поехавший. Я мимошел и увидео твои охуенно ценные ответы уровня, "идите нахуй", надменность всегда отличает находящихся под эффектом Даннинга — Крюгера.

>ты задаешь вопросы


Пиздец, и вот это pr сегодня, не понимает даже как wakaba работает. Ебушка воробушка.
108 1554745
>>54724
хуя, а юродивых на руси все еще любят
109 1554748
>>54723
Вот, братишка понимает, что посты отсталых снижают общий уровень интересности тредов. Когда уже кресты (си с классами) перестанут преподавать в вузах? Дожить бы!
110 1554917
Как пилить рандом в нескольких потоках, чтобы числа не совпадали в соседних тредах?
111 1554920
>>54917
Запили один метод с мутексом.
112 1554923
>>54917
Возьми любой готовый генератор и сделай ему thread_local стейт
113 1554932
>>54610
>>54381
раньше просто в классе-наследнике меняли модификатор доступа с public на private для метода-члена который нужно было "скрыть"
114 1554936
>>54917
Тебе нужен генератор случайных чисел, где семя изменяется на 1 каждый шаг. Ты его перепиливаешь так, чтобы в для примерах трёх потоках семена были 0, 1, 2, и каждый шаг семя изменялись на 3, а не на 1.
Если на быстродействие более-менее плевать, ты делаешь 3 одинаковых генератора в одинаковом состоянии, второму и третьему проводишь 1 и 2 итерации. Потом при извлечении числа выполняешь итерацию 3 раза, и берёшь только последнее значение. Из плюсов - это сработает с любым генератором, даже где семя меняется непредсказуемым образом.
Не уверен что все генераторы сохранят свои свойства рандомности, равномерности распределений и всё в таком роде - нужно проверять.

>>54920
Угу, и это утонет, тому что он вместо 10 мс будет генерировать 10к значений в течении нескольких секунд.

Лучше тогда единый циклический массив создавать, и оттуда с помощью атомарного счётчика извлекать значения. Например, буфер на 256 значений. Метод атомарно увеличивает значение, забирает число, и потом генерирует новое (в массиве помимо числа хранятся состояния генератора и номер). Можно и стек какой-нибудь неблокирующий прикрутить, но что-то я больше в циклический массив вижу.
115 1555053
>>54748
Ещё лайфхак: не читать посты, в которых есть буква Q. Моя жизнь действительно стала намного легче, когда я начал игнорировать qt-детей в этом итт треде.
116 1555057
>>55053
То ли дело посты с буквой "w" от winapi-олдов.
117 1555164
C++ бояре уровня $300КК/ПСЕК, поясните, что говорит компилятор в ответ на вот этот код: https://wandbox.org/permlink/DBXyIaWOyQuUtlDX?
118 1555171
>>55164
Он говорит, что третий аргумента find'а должен быть типа std:;vector<int>, а не int.
119 1555179
>>55164
у тебя вектор из векторов, только вместо вектора ты почему-то ищещь число.

Это как бы в ящике ящиков ты бы искал содержимое ящиков
chandler-carruth-what-is-this.png221 Кб, 600x440
120 1555188
Два вопроса по теме «C++ Type Loophole» и «Stateful TMP»:
1. Цитата: «В C++ неймспейс-скоуп — это такое глобальное состояние, которое можно менять (через инстанциирование шаблонных структур с функциями-друзьями), и которое можно считывать (через SFINAE, detector idiom и тому подобные трюки). Интересно, можно ли это считать ещё одним тьюринг-полным языком внутри C++?» [1]
Вопрос: Поясните, где там именно это «глобальное состояние»? Как оно меняется? Как его записывать? Как его считывать? Пока непонятно. По статье с Хабра: причем вообще здесь if constexpr(false) и template<typename> void foo() против void foo()?

2. Цитата: «This type loophole basically allows us to store some type into a "variable" and later read it back! It's very powerful» [2].
Вопрос: Так а type_list а-ля Александреску ведь то же самое делает. Разве нет?

Источники:
1. https://habr.com/ru/post/472780/
2. https://alexpolt.github.io/type-loophole.html
121 1555201
>>55188
Ещё такая цитата есть: «Defining a friend function in a template, then referencing that function later provides a means of capturing and retrieving metaprogramming state».
122 1555205
>>55188

> Поясните, где там именно это «глобальное состояние?


Очевидно, в компиляторе.

>Как оно меняется? Как его записывать? Как его считывать?


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

> По статье с Хабра: причем вообще здесь if constexpr(false) и template<typename> void foo() против void foo()?


В стандарте содержимое if constexpr (false) отбрасывается только в шаблонных функциях, поэтому в обычной функции ничего не отбросилось.
123 1555207
>>55188
ебать там комментов насрано
но я, несмотря на то что и целиком книжку александреску читал (еще в нулевых) и "шаблоны с++" вандервурда тоже читал, те, в принципе, могу понять че там делают, НО нахуя?
зачем
124 1555210
>>55188
>>55205
Ну и не забивай себе голову, там по ссылке
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#2118
эту хуйню всё-равно собираются запретить
image.png37 Кб, 502x581
125 1555220
Помогите.

У меня есть луп1, он ожидает нажатия одной из двух клавиш (Х, SPACE) и выполняет действия, которые в конечном итоге ведут в луп2

Луп2 выполняется бесконечно до тех пор, пока не будет нажат Z, после чего будет осуществлен переход обратно в луп1.

Проблема в том, что если кнопка выхода из луп2 будет нажата еще до входа в сам луп - после входа луп2 выполнится один раз и тут же выйдет в луп1.

Как сделать так, что бы кнопка засчитывалась только тогда, когда выполняется участок кода который ее ждет? А то получается так, что я могу в самом начале прожать выход из лупа еще до того, как программа в него войдет.
126 1555230
>>55220
Это побочный эффект этой функции. Тоже сталкивался с ним во время дельфиёбства. Я тогда каждый раз считывал все 255 клавиш, и уже потом проверял значение на равенство 0, залезть в описание мозгов не хватило.
Если с момента прошлого вызова клавиша была нажата, то функция выдаст не ноль, и уже только на второе считывание выдаст 0. Она же какие-то номера выдаёт - попробуй посмотри что эти номера означают, там должна быть эта информация.

Собственно, вот описание с первой же ссылке: "Если функция завершается успешно, возвращаемое значение устанавливает, была ли клавиша нажата начиная с последнего вызова функции GetAsyncKeyState, и является ли клавиша в настоящий момент отпущенной или нажатой. Если старший значащий бит установлен, клавиша находится в нажатом состоянии, а если самый младший значащий бит установлен, клавиша была нажата после предыдущего вызова GetAsyncKeyState. Однако, вам не следует полагаются на это последний характер изменения; для получения дополнительной информации, см. раздел Замечания."

А вообще используй хуки лучше. Зачем гонять цикл непонятный, если можно каллбек засунуть.
PRGM.jpg63 Кб, 640x427
127 1555233
>>55205

> содержимое 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>).
128 1555235
>>55207

>НО нахуя?


Тоже не понимаю. Если уж оч. нужно работать в компайл-тайме (вычисления/рефлексия), то «вбилдили» бы в С++ норм. язык для компайл-тайма (например, CCL -- С++ Compile-Time Language), кот. исп. привычный синтаксис С++, и код на кот. помещается внутри конструкции __ccl { code }.
А сейчас порнография а-ля «в 2 часа ночи случайно нашёл новый сайд эффект в шаблонном С++ коде, сразу же пролил (от радости и от ужаса) чай и уже утром (пока соображал) вместо того, чтобы тихо зарепортить на http://www.open-std.org/jtc1/sc22/wg21, написал сокрушительный пост в бложек «The New Great С++ Type Loophole», выступил на конференции -- код растащили в продакшн (несмотря на "Верещагин, уходи с баркаса!!!")».
129 1555246
>>55235
ну лично я поклонник умеренного использования фич языка, без фанатизма
вот, к примеру, в chrono ты можешь время записать в удобной для тебя форме, а оно при компиляции уже посчитается в удобную для машины форму, окей, это удобно
вроде как и компай-тайм, но, такой, лайтовый
130 1555247
>>55235
ну а вообще вот то что ты сказал, комитет именно это и делает в новых стандартах
раньше для вычислений компайл-тайм приходилось использовать некий набор трюков связанных с шаблонами (лень перечислять, кто незнает, может тупо открыть древнюю книжку александреску и почитать)
а щас у тебя все то же самое можно делать итеративненько (и до неприятного понятно, ибо магия пропадает) в constexpr функциях
131 1555249
>>55233
Причём тут get? Отбрасывание ожидалось в foo
132 1555256
>>52778 (OP)

>automtic smart pointers


Это что за зверь?
133 1555260
>>55188
Stateful TMP через friend injection это же рваный бойан.
134 1555664
>>55249
Да, отбрасывание происходит в foo.

get тут притом, что по факту в разных компиляторах отбрасывание (в foo) происходит / не происходит в зав-ти от определения ф-ции get:
- если тип её аргумента НЕ явл. аргументом шаблона класса, то компиляторы ведут себя одним образом (в основном НЕверным), - если тип её аргумента явл. аргументом шаблона класса, то другим (в основном верным).
135 1555672
>>55179
как боженька пояснил!
136 1555673
>>55220
иди на хуй со свое лабой и ГОТУ прихвати
137 1555674
>>55673

>ГОТУ прихвати


Ты ещё не постиг Дао.
138 1555681
>>55188
Вот, наверное, ставший уже классическим, тривиальный пример stateful template metaprogramming для 2-х состояний (false / true) [1].

Операции с состояниями:
- Запись состояния: 1-й вызов int f () => 1-й вызов оператора noexcept (flag (0)) => так как на данный момент friend-ф-ция int flag (int) еще не определена, то noexcept (flag (0)) вернет false => 1-й вызов int f () вернет false.
- Изменение состояния: 1-й вызов ф-ции int f () => инстанцирование шаблонной структуры struct writer => определение friend-ф-ции int flag (int).
- Чтение состояния: 2-й вызов int f () => 2-й вызов оператора noexcept (flag (0)) => так как на данный момент friend-ф-ция int flag (int) уже определена, то noexcept (flag (0)) вернет true => 2-й вызов int f () вернет true.

В русскояз. пространстве есть два названия такого приёма:
1. (офиц.) «программирование на шаблонах с сохранением состояния»
2. (народн.) «протаскивание» состояния через повторные вызовы constexpr-функций» [2].

Основной принцип таких приёмов заключается в том, что инстанцирование шаблонных структур/классов в разных частях кода ведёт к определениям friend-ф-ций (доступных через ADL в глоб. простр. имен), что приводит к изменению состояния, читаемого в данном примере через вызов оператора noexcept (flag (0)).

В заключение стоит отметить, что С++ в его нынешнем виде -- это ветеран, который весь «латаный-перелатаный», весь «чиненый-перечиненый», весь «заплата на заплате», который медленно (но уверенно), через годы, через труд, пот, боль и кровь приближал (как мог) победу в ожесточённой битве за (среди прочих) производительность и zero-cost abstractions, при этом неся на себе тяжелый груз обратной совместимости с пред. С++ стандартами.

Ссылки:
1. http://b.atch.se/posts/non-constant-constant-expressions
2. https://2ch.hk/pr/arch/2018-08-16/res/1196791.html#1196926 (М)
139 1555687
>>55220
все у тебя нормально? мать не сдохла? скажи кто тебя гото научил, я его пиздану
140 1555753
>>55673
Это не лаба, я вообще пытаюсь учить плюсы только пять дней по вечерам после работы.
>>55687

>скажи кто тебя гото научил


Вот тут пример посмотрел. Единственная отговорка почему его "нельзя" использовать заключалась в том, что это якобы усложняет чтение программы и можно запутаться в порядке выполнения кода. Хотя, мне показалось, что это наоборот облегчает переход из одного участка кода в другой, так как не нужно создавать 99999 булианов и проверять их значения. И как выпрыгивать из многоуровневых циклов без готу я вообще не представляю.
https://ravesli.com/urok-66-operator-goto/
141 1555767
>>55753

>почему его "нельзя" использовать



На практике goto используют только новички, или деды с седыми яйцами. Если у деда ещё не начался маразм, то ему можно, потому что он наверняка знает что делает и в конкретном случае этот goto имеет смысл.
142 1555768
>>55753
Goto затрудняет понимание кода, рекомендуют избегать это. Из цикла всегда один выход, можно еще через break дополнительно делать, если требуется.
Кстати почему такой бугурт с ЛАБ? Вы думаете дохуя в универах объясняют и типа если возникают трудности/вопросы, то человек не учится?
143 1555777
>>55768
Лично я ещё с начальным уровнем знаний научился гуглить и думать, а не ныть, что "это мы не проходили". А по постам большинства тех, кто идёт сюда с лабами, сразу видно, что думать они не хотят.
144 1555778
>>55753
без гото инструкции выполняются последовательно и даже циклы и операторы ветвления работают в определенных рамках. в этом вся суть, глаза знают куда прыгать при чтении кода. гото же позволяет делать неведомую хуйню

давай чуть попозже мне станет скучно и я тебе распишу че ты хочешь там с кнопками сделать, если успею
145 1555797
Ваши все высеры про goto похожи на результат того эксперимента над обезьянами, где их водой обливали. Никто из школьников-хейтеров goto итт его никогда не использовал и не встречал где-то кроме статей "топ 10 ебанутых фич c++", но считает важным упомянуть, что это плохо
146 1555803
>>55767

>На практике goto используют только новички


Я новичок и просто не могу представить как можно делать эту логику перепрыгивания в нужные мне участки кода по другому, у меня не хватает знаний. Узнал об операторе, нашел пример его использования, он мне показался подходящим.
>>55777
Это не лаба, я закончил университет год назад (могу пруфануть). Хотя лучше бы это была лаба, в таком случае у меня был бы преподаватель объясняющий хоть что-то. Но я совсем один, у меня нет ни знакомых ни друзей программистов. Все что я могу - это гуглить и собирать информацию по крупицам. Вот я насобирал и написал этот говнокод, я же не знал, что так нельзя. Теперь знаю. Спасибо.
147 1555807
>>55687

>скажи кто тебя гото научил, я его пиздану


Макконел описывал одну ситуацию кстати, когда гото может облегчать код.
zd0aroau9sc31.png155 Кб, 640x640
148 1555820
>>55687
Я научил, но как ты узнал?
149 1555825
>>55768

>Кстати почему такой бугурт с ЛАБ?


Я самоучка, и потратив смешное время ещё в школе на кодинг своего платформера на gdi+ просто по фану без какой-либо цели, все эти лабы стали очень простыми. Если человек спрашивает что-то уровня лаб, то это выглядит так, как будто он просто не удосужился 30 минут посидеть и разобраться. Потому и некоторое презрение иногда проскакивает - как будто человеку этот код не интересен, а он хочет сделать конкретное задание и забить. Даже если я сознательно понимаю что это не так, отделаться от общего негативного впечатления не всегда получается.


Те ребята которые гонят на гото мне тоже не нравятся. Концепция очень хорошая и отражает то что действительно происходит на процессоре. Если поймёшь гото - то поймёшь всё остальную логику с условными переходами в любых рекурсиях и циклах.
Использовать его не стоит в чём-то сложнее кода в один файл или выхода из двойного цикла (где goto полностью эквивалентро return-у в функциях, который никого особенно не смущает почему-то), но разобраться он как работает и какие побочные эффекты вызывает - очень хорошая идея.
image.png209 Кб, 1370x769
150 1555831
>>55673
>>55687
Ловите ньюфагов ака студентобыдло.
151 1555839
>>55831
Странно ненавидеть Goto. Но хуёво использовать его не к месту.
152 1555849
>>55831
Это си, гений. И там это используется а-ля try\finally очистка ресурсов.

И вообще, goto очень серьезно ломает всю систему жизни обьектов в С++, там ехал UB через UB, если не знать точно, что ты делаешь, что не является случаем студентиков.

Короче - goto нахуй и впизду.
image.png28 Кб, 387x588
153 1555861
Переделал без готу, так правильно, или я опять долбоеб?
154 1555863
>>55849
И что что Си? На крестах без ООП ты как будешь ресурсы очищать? try\finally платформозависимый код и не везде может применяться, да и вообще эта конструкция еще опаснее и сложнее, чем goto. Goto позволяет улучшить качество кода и сократить его.
155 1555866
>>55861
Замени (GetAsyncKeyState('Z')) на (GetAsyncKeyState('Z')&(1<<16)) же.
Что ты хочешь сделать?
156 1555890
>>55863
Задетектен идиот, не знающий про RAII. Попробуй снова.
157 1555896
>>55890
Он про него и говорит, дебил.
158 1555897
>>55896

>пук

cpp.png68 Кб, 1200x1349
159 1555898
Привет, двачеры.

Подскажите какие-то книги или другие ресурсы по изучению плюсов.

Я не нуб, знаю JS на высоком уровне и основы плюсов (йобаное ООП, перегрузку функций, указатели и т.д.).

Хотелось бы освоить тонкости самого языка, все эти инлайновые операторы, библиотеку Windows.h, её аналог под nix'ы, tcp/http на плюсах.

Пробовал msdn, но это пиздец, по сравнению с mdn - кусок дерьма, но если ничего другого не найду, придеться сидеть на нём =(
160 1555899
>>55861
Не обязательно писать while(variable == true), эта запись эквивалентна while(variable)
161 1555900
>>55898
Tour of C++ страуструпа. А дальше уже нужные тебе области отдельно.
162 1555902
>>55861
>>55899

Т.е. ты просто сравниваешь variable == true (true == true), что на выходе выдаст тебе true, а можно писать просто variable, которая на выходе тоже даст true.
163 1555906
>>55890
А теперь перечитай мой мост и иди реализуй RAII без ООП. Кретин.
164 1555908
>>55898
По самому язык бери любую книгу из шапки.

По "Windows.h" копай в сторону WinAPI. На эту тему есть отдельная литература. Однозначного аналога для Unix нет, он не такой монолитный, как винда. Тут и POSIX API, и вещи, типа dbus/xcb/etc. В общем, много всего.
Хипстерский сайтик, где всё это было бы в удобном формате в одном месте, ты вряд ли найдёшь. Придётся копать кучу литературы.
165 1555909
>>55890

> Задетектен идиот, не знающий про RAII


Значение знаешь? Походу идиот здесь ты.
166 1555911
>>55906
А нахуя мне это делать, ебаклак? Мы в С++ треде. Может мне еще гитару без струн сделать? Телевизор без экрана? Что еще придумаешь охуенного?
167 1555916
>>55911
Так пиздуй в С# тред, ООП-шизло, С++ не про это.
168 1555927
>>55916
Все топовые крестовики мира пишут про RAII, но сегодня мы узнали от эксперта с двача, который знает, про что С++, что все эти эксперты ошибались. Что же делать. Как быть.

Хотя если у тебя есть желание продолжить меня смешить - можешь рассказать нам, про что С++ по твоему авторитетному мнению.
169 1555935
>>55898

>библиотеку Windows.h


Освой создание простых (без кастомных контролов и GDI) GUI на чистом WinAPI. Освой многопоточность через processthreadsapi.h. Освой получение данных о железе через WMI.

>tcp


Winsocks

>http


WinHTTP. Есть ещё WinINet, но я не юзал его.
170 1555936
>>55927
Это >>54331 случаем не твой пост? Я вижу ты любишь жрать говно. Иди вики хоть открой и посмотри, что такое мультипарадигменный язык программирования и какие парадигмы доступны С++. Топовые крестовики похоронили ООП еще в 2015-2017.
171 1555939
>>55927
так то raii щас нужен когда нужно управлять другими ресурсами, а не памятью
для памяти есть умные указатели (и в стандарте тоже), которые и реализуют из коробки идеому raii
также семантика перемещения вообще позволяет реализовать интересный подход, когда отказываются от выделения чего-то на куче, а делают все на стеке
172 1555941
>>55935

>Winsocks


>WinHTTP


А под nix'ы есть что-то подобное?
173 1555942
>>55936
Спасибо за то, что решил таки продолжить меня смешить, тебе это удается. На всякий случай - ООП это парадигма, а не использование слова class в нужных местах.

И да, ты прав в том, что язык действительно мультипарадигменный, и за счет этого он позволяет в нужных местах использовать наиболее подходящие инструменты, а не тупо забивать гвозди ломом, при этом вопя что ООП ПРОШЛЫЙ ВЕК ДЖАВА ГАВНО НАСЛЕДОВАНИЕ АХАХА ДЕДУЛЬ
174 1555944
>>55941
В линуксе вместо винсока дефолтные BSD сокета. Собстно, винсок - это калька с них. Вместо WinHTTP там дефолтный libcurl, кстати, настоятельно и под виндой рекомендую его использовать. А еще лучше - обертки, типа curlpp были, которые сишный ад превращают в читаемое C++ API.
176 1555947
>>55942
Смешишь тут только ты, обосравшись несколько раз в терминологии и наглядно показав свою некомпетентность.
177 1555952
>>55947
Где вас, таких конченых идиотов берут, и что вы забыли в С++ треде? Вот вопрос, который меня очень интересует. С GOTO, с тем, что RAII это ООП, а ООП уже никто не использует, и с прочим кретинизмом человека, который не написал ни одной строки в прод, но почему-то считает, что знает С++.
178 1555953
Посоветуйте библиотеку/фреймворк для создания графического интерфейса на плюсах
179 1555954
180 1555957
>>55953
qt для серьезного UI, для самодельной херни и простоты - imgui или nanogui
181 1555958
>>55953
Под какую OS? Windows, Linux, кроссплатформа?
182 1555963
>>55902
Понял, спасибо.
183 1555965
>>55952
Мань, я вижу ты любишь высасывать аргументы из своего ануса и придумывать на ходу. Чем тебе Goto не угодил? Ты на сях судя по всему и хеллоу ворлда не писал и что-то кукарекаешь за прод еще.

> что RAII это ООП


Где я это писал? Еще какую-то хуйню в предыдущем посте про классы придумал. Совсем сказать нечего по делу.
184 1555968
>>55936

>Топовые крестовики похоронили ООП еще в 2015-2017.


что это за чушь?
с++ остается ооп языком
мы все также пишем классы, определяем члены-функции в них, задаем кострукторы-деструкторы, задаем операторы преобразования и конструкторы преобразования (те мы конструируем пользовательские типы данных, определяем операции, доступные над этими типами данных и операции регулирующие жизненный цикл переменной этого типа данных, так же мы задаем и отношения между типами данных)
все так же мы используем наследование между классами, проектируем гомоморфные иерархии классов (те мы задаем отношения между типами данных), другое дело что сейчас есть альтернативный подход через шаблоны - а именно классы считаются объединенными в семейство классов если удовлетворяют параметру шаблона (плюс в языке есть уже развитая экосистема для этого - а именно type traits и другие средства, в с++20 будут концепты)
мы все также используем полиморфизм (базовую концепцию опп, вообще то), другое дело что там где возможно, динамический полиморфизм посредством виртуальных функций заменяется на статический полиморфизм, реализуемый через шаблоны, либо на ad-hoc полиморфизм перегруженных функций

можно говорить, что ооп в с++ изменяется, но он ооп остается ключевой идеологией языка
185 1555969
>>55954
SFML - это про 2D-графику, а не гуй.
186 1555972
>>55958
Видна, но лучше кроссплатформа
188 1555974
>>55952

> 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.

189 1555975
>>55965

>Мань, я вижу ты любишь высасывать аргументы из своего ануса и придумывать на ходу. Чем тебе Goto не угодил? Ты на сях судя по всему и хеллоу ворлда не писал и что-то кукарекаешь за прод еще.


Ох, эти проекции сбрендившего студентика.

>>55916 - вот тут ты эту хуйню высрал. Но продолжай маневрировать.
190 1555980
>>55973
Свой гуй можно поверх хоть голого опенгл сделать, Но это не делает опенгл библиотекой для гуя.
191 1555986
>>55972
Тогда qt или GTK+ (gtkmm). Под винду WinAPI, но он может быть сложноват, да и в Linux работать только через WINE будет.
192 1555987
>>55986
забавно то, что когда ты пишешь гуй на qt внезапно обнаруживаешь что ты пишешь гуй на js, лол
точно так же и гуй на gtk удобней писать на vala..
193 1555988
>>55987
QML не существует. Существуют только виджеты.
194 1555989
>>55972
MFC, без шуток
Коряво, но работает, не требует сторонних библиотек и твой проект прекрасно соберется даже через 20 лет.
195 1555990
go-to кстати, быстрее switch процентов на 10-15%..
одна из забавных оптимизаций, работающих и в настоящее время.. из-за лучшего предсказания переходов..
положим, если в каком нибудь интерпретаторе можно переписать основной луп со свитчей на goto то можно получить нихуевый буст к скорости..
196 1555991
>>55989

> MFC


Пидора ответ.
197 1555992
>>55990
В студию пример с goto, который работает на 10-15% аналогичного свитча, и методику тестирования, по которой это было замерено.
198 1555993
>>55990
из-за чего кстати, первые проги на си проигрывали фортрану в производительности..
199 1555995
>>55992
пфф
щас, штаны только подтяну и начну
200 1556001
>>55968
Объектно-ориентированных подходов много, конкретно тот самый ООП мертв.

>>55975
Что-то я не вижу там этого. И да, вон выше вырезка из вики для тебя. В ООП владение ресурсом реализуются через RAII идиому. С чем ты не согласен то? И так давай подведем итоги:
1. Ты не умеешь пользоваться оператором goto, как следствие яро утверждаешь что он не нужен, что говорит о низком скиле
2. Обосрался в терминологии RAII, не до конца осознаешь что такое объектно-ориентированный подход в программировании, как он может быть реализован
3. Додумываешь какую-то хуйню у себя в голове из-за низкого уровня знаний и некомпетентности, каши в голове и выдаешь это за мои слова или свою истину.
4. Список маневров:

> Ох, эти проекции сбрендившего студентика.


> Но продолжай маневрировать. О да это же самый базовый метод маняврирования - уличить оппонента в маняврировании


> Где вас, таких конченых идиотов берут, и что вы забыли в С++ треде?


> Спасибо за то, что решил таки продолжить меня смешить, тебе это удается.


> Все топовые крестовики мира пишут про RAII, но сегодня мы узнали от эксперта с двача, который знает, про что С++, что все эти эксперты ошибались. Что же делать. Как быть.



Хотя если у тебя есть желание продолжить меня смешить - можешь рассказать нам, про что С++ по твоему авторитетному мнению.

В принципе все твои посты это флуд и маневры, по делу нуль полный.
201 1556012
>>56001

> 1. Ты не умеешь пользоваться оператором goto, как следствие яро утверждаешь что он не нужен, что говорит о низком скил



Тут я закончил читать, сорри.
202 1556017
>>56012
Правильно, обосрался - обтекай.
203 1556020
>>56017
Сказал долбоеб с полными штанами говна, который отправил за упоминание RAII в С# тред, потому-что ООП мертво.
204 1556027
>>56001
немогу понять ты за красных или за белых
ты какой то мутный чел, если честно
205 1556042
>>56020
У тебя проблемы с мышлением, логикой, да и с бошкой скорее всего в целом. Подлечись что ли, таких в люди страшно выпускать.
206 1556044
>>56042
Опять проецируешь, да сколько можно же.

Насрал в штаны - признай это. Нет, опять какую-то хуйню несет. ООП у него в C#, навыки пользования оператором goto у него показатель скилла, и прочая хуйня.
207 1556074
>>56044

> ООП у него в C#


Скажешь нет? Штирлиц никогда не был так близко к провалу. Спасибо за эти кривляния, забавно выглядит.
208 1556084
>>56074
Я ничего тебе больше не буду говорить, тут понятно, что между нашими скиллами разницы миры, и ты даже понять не можешь, что я тебе пишу.

Когда устроишься на первую работу - попробуй нахуярить GOTO в проде, расскажи всем, что классы устарели, ведь это ООП, и доставь кулстори о результатах.
209 1556102
Царь, это ты?
210 1556105
>>56084
Вытекаешь уже из треда.
211 1556110
не знаю что вы тут спорите, ведь все очевидно:
- гото действительно можно использовать для лаконичности кода долбоебы в общем то и без гото нахуярят говна

- ооп это блять простой подход для распределенной работы над проектом нескольких человек, я же расписывал недавно

- студенты хуесосы и идут нахуй. раньше я на них тоже бугуртил "иди погугли даун первая ссылка", а за это модераторы хуесосили на форумах. потом я понял, что если все таки решать их глупые задачи, то они так и останутся долбоебами, а это хорошо. зачем продолжать плодить вкатывальщиков?
212 1556122
>>55988

> QML


Почему это говно провалилось?
213 1556124
>>56122
а оно провалилось?
Я не в теме вообще, на QT не пишу, но мне казалось, что кутишники очень много сил и ресурсов вложили в QML
214 1556128
>>55989
Открываешь в 17 студии MFC проект, созданный в 10 студии
@
Страдаешь
215 1556130
>>56128
открываешь проект, созданный в 10ой студии
@
страдаешь
216 1556132
>>56130
Чего не так со студией-то?
217 1556134
>>56132
Со студией все отлично, с проектом, который никто не обновлял с 2010 все очень плохо обычно.
218 1556151
>>56124

>очень много сил и ресурсов вложили в QML


Провели большую работу, изобретя колесо. Квадратное.
219 1556156
>>55849

>И вообще, goto очень серьезно ломает всю систему жизни обьектов в С++, там ехал UB через UB


Ты с setjmp/longjmp не путаешь?
220 1556157
>>55898

>Подскажите какие-то книги или другие ресурсы по изучению плюсов.


http://eel.is/c++draft/
221 1556170
>>52808
Покажи код.
222 1556178
>>56110
ООП это грамотная организация кода, которая позволит тебе в будущем и настоящем его улучшать, либо использовать в других программах. Не следовать его принципам можно только если ты любишь поковырятся в собственном дерьме/не планируешь использовать исходный код, в том числе изменять его/любишь изобретать велосипеды.
223 1556229
>>52778 (OP)
Сап, хочу несколько тупых вопросов задать.
1. Что мне мешает на любую околоматематическую функцию вешать constexpr, вдруг где-то внутри сконстантится?
2. Что мне мешает на любую работу с фиксированными векторами, типа элементы вектора A возвести в квадрат и передать в B вешать (если работаем в цикле) #omp parallel for и радоваться ez параллелльности?
3. Если для случая выше применить std::transform, может ли оно когда-то где-то само соптимизироваться в параллельность?
224 1556236
>>56229

>1. Что мне мешает на любую околоматематическую функцию вешать constexpr


То, что околоматематические функции лезут в глобальное состояние.
225 1556239
>>56229
2,3) c++17 и std::execution_policy тебе в помощь.
226 1556242
>>56239
А как было раньше? Я пока не хочу включать c++17, так как очень опасаюсь ситуации, что проект придется пересобрать на редком компиляторе под специфическое железо.
Или раньше деды прям ассемблер вставки делали?

>>56236
что это такое
227 1556703
имхо, мне не нравится когда дают определение ооп как методологии программирования
подход, когда к ооп относятся как к одному из вариантов реализации пользовательских типов данных и задания отношений между ними, мне ближе, тк позволяют дать более формальное (близкое к математическому) определение
в с++ класс - это пользовательский тип; доступные операции над типом задаются через определение членов-функций; переменная типа - это объект; способ создания объекта задается парой конструктор-деструктор; отношения между типами задается посредством наследования классов, посредством членов-функций преобразования и конструктора преобразования; динамический полиморфизм взаимосвязанных типов реализауется через механизм виртуальных функций; и далее по списку..
в других языках существуют другие способы реализовывать пользовательские типы, вообще работать с типами
но в с++ все же основной подход остается через ооп
image.png131 Кб, 527x300
228 1556900
>>52778 (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? Подскажите пожалуйста скрипт.
229 1556912
При сжатии текста Хаффманом на выходе получается определённое число бит, которое нужно дополнить до целого числа байт, ведь побитно писать нельзя.
И вот надо что-то дописать, а как при декодировании это пропустить?
230 1556933
>>56912
Вся идея хаффмана, что ты пишешь кашу из битов. Не надо ничего дополнять куда-либо.
231 1556934
>>56900
ути-пути какой расторопный студентик
еще даже новый год не прошел а он уже дипломчик делает!
232 1556956
>>56178
грамотно организовать код можно и без ооп. повторно использовать код можно и без ооп. ковыряться в дерьме и клепать велосипеды можно и с ооп.

давай подробно разберем повторное использование кода, для примера. как ооп помогает в этом? то есть ты предлагаешь просто взять и скопировать нужные классы в другой проект? допустим даже код без багов, а если в другом проекте не будут нужны все поля из первого проекта, или некоторых будет нехватать? а в третьем тебе одна функция нужна, ты серьезно это пишешь дебил бля ебаный? пошел нахуй школьник
233 1556960
>>56934
Но ведь он не говорил ни про какой диплом?
234 1556963
>>56242

> Или раньше деды прям ассемблер вставки делали?


Только если совсем упоротые. Для людей есть интринсики.
235 1556999
>>56956
Когда вообще не понимаешь сути ООП.
236 1557023
>>56900

> то оказалось что они скомпилены под архитектуру x86_64 а не под arm.


Я вижу, что там проверяется ANDROID_TARGET_ARCH в скрипте и согласно ему qt подключает нужную сборку. Во-первых, посмотри, есть ли $$PWD/android/lib/libgrpc++.a вообще после запуска скрипта. Во-вторых, qt под какую архитектуру собирает у тебя? В qt creator в открытом проекте в левом нижнем углу кнопка типа build, там должна отображаться архитектура.
237 1557038
>>56999
сука гото сектант ебаный, говори адрес я тебе очко раздеру

>>55220
чел чел чел я тебе обещал расписать что там. в общем я понял что ты хочешь, и это все хуйня что ты написал.

решается это все одним флагом. если флаг 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);
}
238 1557052
>>56933
Нельзя записать 43 бита. Можно 5 байт, можно 6, но 5.375 байта нельзя, и поэтому приходится округлять
239 1557055
Кто-нибудь здесь проходил задания на exercism.io?
240 1557057
>>57038
Так действия на 'Х' и действие на Space разные, но оба действия в конечном итоге ведут в один и тот же луп, выход из которого по кнопке Z.

А ты объединил их в одно.
241 1557080
>>57023

>Я вижу, что там проверяется 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 нормально собирается под андроид
242 1557084
>>57057
у тебя проблемы с этим?
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);
}
243 1557099
>>57038
goto сектант - это другой обоссаный челик
244 1557100
>>57080

> я не понимаю, в каком скрипте?


В этом. https://github.com/grpc/grpc/issues/19794#issuecomment-516588669 тот коммент, ссылку на который дал
Там сборка под каждую архитектуру в свою подпапку, потом инструкции для qmake, для .pro файла, видимо.
245 1557104
>>57080

> cmake --build .


Или в том и проблема, что не в подпапку, а в текущую папку перезаписывает каждый раз для каждой архитектуры, а последняя архитектура там как раз x86_64.
246 1557141
>>57104
поскольку мне надо проект собрать под armeabi-v7a, то я юзаю только первые 4 команды cmake, но после первых 2 команд создается 9 либ, которые я копирую в свой проект, но когда я их проверяю командами ar и file, они все равно для x86_64. И после еще 2 команд создаются все библиотеки, grpc++_unsecure и прочие и тоже для x86_64.
247 1557155
>>57141
Понял, тогда у меня больше нет вариантов, где ошибка.
image.png76 Кб, 933x629
248 1557160
>>57038
Чего? Это не я писал. Не забывай, что ты на борде. А тот студентик да, пусть нахуй идет. С его слов си дайз не ООП язык. Мне даже интересно, что этот обезумевший первокур в треде забыл, лабу бы пилил шел.
249 1557189
Я слышал, что есть возможность складывать две функции, но на первых двух страничках поиска в гугле, да и в справочниках такой инфы не нашел. Так это возможно? Если да, то как?
250 1557223
>>57189
В каком смысле складывать? Что это означает и какой результат должно выдавать?
Если это математические функции, ты можешь написать новую являющуюся суммой двух предыдущих, если у них типы и всё остальное такое же.
А если у тебя одна функция копирует массив байт, а вторая сортирует записи в файле, то суммой этих функций будет являться что?
251 1557239
>>57189
Переформулируй вопрос.
Может, ты имел в виду композицию функций?
252 1557251
>>57223
Я точно не уверен, но результатом будет, что-то вроде
функция В = функция А + функция Б. И когда я вызываю функцию В, то первой будет вызвана функция А, а потом функция Б. Обе функции принимают параметры, которые передаются функции В
253 1557260
>>57251
Короче.
Если тебе надо F(u) = f(x) + g(y), где u = x + y, то ничего путного ты не нагуглишь, так как это интуитивно понятная вещь, сложение результатов функции. Как если ты результат вызова каждой сохранишь в переменную и потом сложишь.

А если тебе надо F(x) = f(g(x)) или, что вернее, F(x) = f(x) g(x) - то это композиция и просто результат функции g передается в функцию f. Что тоже интуитивно понимается и можно так же через дополнительную переменную сделать.
254 1557262
>>57189
ага
в стандартной библиотеке есть набор стандартных функциональных объектов, адапторов, привязок, при помощи которых ты можешь комбинировать функторы, свободные функции, функции-члены классов, лямбда-функции между собой, порождая новые функторы, ну а дальше передавая их в стандартные алгоритмы, например
1577317382227.jpg20 Кб, 834x139
255 1557264
>>57260
Вакаба съела кружочек, да и полностью верная формула выглядит по-другому немного.
256 1557265
>>57260
Мне нужно немного другое. F(u) = f1(u) + f2(u). И для этого мне нужно гуглить то, что порекомендовал вот это анон >>57262 ?
257 1557266
>>57265
Можно, если ты хочешь обращаться функциональщиной.
А можно сделать функцию F, которая внутри себя складывает результат вызова f1 и f2.
И передавать в нее x и указатели на эти две функции. Либо std::function вместо указателей, если плюсовым способом, а не сишным.
Или захардкодить вызов этих функций внутри F.
258 1557267
>>57266
Обмазаться функциональщиной.
Самофикс
259 1557269
>>57266
>>57260
>>57262
Спасибо за помощь
image.png10 Кб, 278x168
260 1557272
Идея может странная, но я могу к оператору вывода в поток добавить функцию? Например я пишу функцию test и комбинирую её с выводом в поток. В итоге получаю измененный поток вывода, который сначала выводит в поток строку, а затем вызывает функцию test
261 1557273
>>57251
Надумал проблему. Просто берешь и вызываешь по-очереди А и Б внутри В. Можешь заинлайнить их если очень хочется.
262 1557275
>>57265

>Мне нужно немного другое. F(u) = f1(u) + f2(u)


https://pastebin.com/JeA4Zb4w
263 1557276
>>57273
ему нужна была функциональная композиция вообще то
264 1557277
Захожу раз в 2-3 дня. Слабо как-то пока, неинтересно. Хоть бы the darkest corners языка пообсуждали бы или там приёмы интересные из опыта. Или статьи по С++ с arxiv. А так, лабы-хуябы, goto, ооп. Сколько можно-то? Скучно же.
265 1557281
>>54001
Ну что мальчик, прийдётся тебе с анальной девственностью расстаться.
266 1557285
>>57277
Постите смешное сами.
267 1557286
>>57276
В таких простых случаях ее не используют.
268 1557287
>>57286
это нужно, к примеру, чтобы сконструировать функциональный объект из существующих по месту и сразу же передать в использование (в стандартный алгоритм, в частности)
щас правда удобней стало лямбдами пользоваться

вообще смысл в том что ты создаешь новый функтор посредством комбинирования других функторов, а не его определением посредством написания кода вручную
269 1557290
>>55210

Уже не работает в clang 9.
270 1557293
>>57277
тебя тут развлекать что ли должны? тред на дваче блять не соответствует его ожиданиям пхахвахахах.. еб твою мать какой же ты тупой дебил

>>57281
я же ему отвечал >>54162 >>54185
271 1557369
>>57272
Гугли манипуляторы потока
272 1557410
>>57369
Если меня не обманули в инета, то все пользовательские манипуляторы работают только когда их вызвали, а вот мне нужно подобие работы манипулятора hex. Один раз вызвал и потом все целые числа отображаются в шестнадцатеричном виде. Только в моём случае вызов манипулятора запускает подсчет выводов в поток
273 1557439
>>57410
А ты попробуй. Стандартные, например, работают пока их не выключишь.
274 1557444
>>57439
Можешь, пожалуйста, привести пример. Я не догоняю как это сделать
275 1557586
>>55797

>Никто из школьников-хейтеров goto итт его никогда не использовал


Использовал в дипломной работе для выхода из вложенного цикла. Брат жив, зависимость есть.

Где-то у Страуструпа есть телега, где он пишет, что в этом случае goto самый простой, а потому самый лучший способ.

В качестве альтернативы некоторые предлагают использовать исключения. Уёбки.
276 1557598
>>57586

> исключения


А ещё их можно использовать для возврата из функции значений разных типов.
image.png13 Кб, 391x219
277 1557675
Как правильно освобождать память в динамической матрице (динамический массив указателей на динамические массивы чисел)? Делал это как на пикрил — программа через раз крашится. Не смог выявить, в каких именно случаях, но это прекратилось, когда я убрал этот кусок кода. Не понимаю, что не так, мне казалось, что все логично. Памагити!
278 1557677
>>57675
Используй вектор, Люк.
279 1557682
>>57675
Быстрофикс: вылеты происходят, когда я пытаюсь выделить память на новую матрицу (адрес сохраняю в тот же указатель), и только в том случае, когда новая матрица больше по размеру.
280 1557683
>>57677
А это не будет лишним?
281 1557685
>>57682
То есть ты спрашиваешь, почему у тебя падает код, который ты не запостил. Умно, умно
282 1557686
>>57685
На пикриле эквивалентный код. Может я неясно выразился, но я спрашиваю, правильно ли освобождать память так.
283 1557692
>>57675
Все, проблема выявлена и решена.
284 1557697
>>57683
Минимально медленнее будет, зато дебажить это говно не будешь
285 1557718
>>57692
какой хороший студентик
возможно ты еще и устроишься дальше по жизни в темлом офисе, а не здохнешь под забором
286 1557741
>>57692>>57682
И в чём же была проблема?
287 1557749
>>57741
Да, тоже интересно.
мимо студень
288 1557775
>>57741
>>57749
Вкратце: я рукожоп. У меня было написано что-то вроде

obj.size.x = m;
obj.size.y = n;
obj.resize({m, n});


то есть, первые две строки были лишними. А вообще, глупо было оставлять size доступным для изменения значения извне, вдвойне проебался.
289 1557821
290 1557845
Какими операторами лучше реализовать программу по типу ребиндера. Что бы менять кнопки клавиатуры местами, и всякий доп функционал, например одна и та же кнопка F становилась цифрой то нампад1, то нампад2, то нампад3, в зависимости от кол-ва нажатий? В какую сторону копать?
291 1557860
>>57682
У меня тоже такая проблема была, я просто делал проверку на изменение матрицы и запрещал удаление, если она менялась.
292 1557935
>>57845
В сторону api твоей операционной системы.
293 1558186
Сколько просить денег при устройстве плюсовиком? Город милионник в окрестностях москвы. Опыт какой-то есть. Сколько просить в москве если надумаю понаехать? Сколько платят например в мэйлру? Есть какая нибудь статистика по зарплатам? Накидайте советов в общем как себя вести при трудоустройстве.
294 1558221
>>53123
Все использовали системные API и не жаловались.
295 1558235
>>58221
Конечно не жаловались, потому что те, кто бы жаловался, не будь у них выбора, перешли на нормальные языки.
296 1558244
>>58186
Какой опыт?
Хотя судя по твоим вопросам ты ниасилил даже гугл. Работай бесплатно
297 1558266
>>58186
Зависит от конторы и твоего скилла. Какой вопрос, такой ответ.
298 1558274
>>58186
не сколько, а как
проси на коленях
299 1558410
Сап
Я новичек в теме, могу глупостей написать, так что соре
Есть вопрос: Совместима ли библиотека json-c и c++, и если да, где найти гайды по работе с ней ?
300 1558418
>>57697
Чо вдруг медленее?? Наоборот это гавно на указателях медленное
301 1558423
>>58410
Почти все сишные библиотеки могут работать с С++. Конкретно json-c у нас где-то есть в проде, работает норм.

Но я бы строжайше не рекомендовал использовать сишное говно в крестокоде - посмотри на самую правильную JSON либу существующую - https://github.com/nlohmann/json
302 1558644
>>58423
Она не работает с широкими символами. Какое-то говно при вызове json::dump.
303 1558645
>>58274
Мамой клянусь, усё сделаю.

>>58244
10 лет бд, формошлёпства и петов, всякая низкоуровневая поебота уровня ардуин. В общем не блидинг едж, всякую вычурную плюсовую пургу не вкуриваю, но задачи выполняю. Не задрот, проще говоря.

>>58266
Это понятно что зависит. А как сориентироваться то?

>>58235
Вообще я так понял нужно что-то более адекватное чем плюсы искать? Что посоветуешь для беспроблемного трудоустройства?
304 1558732
>>58645

>нужно что-то более адекватное чем плюсы искать?


Если есть опыт разработки бэкендов высоконагруженных, обработки видео-аудио, блокчейны, компьютерного зрения и машинного обучения (тут хорошо бы еще питон знать), и т.п., то прекрасно устроишься и тебя всячески ублажать будут.
А просто так С++ кому особо нужен? Это же не джава, на хороших плюсовых вакансиях он обычно идет плюсом к серьёзным задачам.

Ну можно еще на какое-нить формошлептство на Qt и прошивку микросхем устроиться, но там зп микроскопическая обычно, сам же знаешь.
305 1558951
Как сделать код на qt приятным глазу? Вот например конструктор главного окна, по мне так выглядит просто отвратно
https://ideone.com/1C87pk
306 1558964
>>58951
Нормальные люди запихивают свои формочки в *.ui и добавляют uic в pre-build step. В конструкторе у них остаётся
m_ui = std::make_unique<Ui::MoyaForma1>();
m_ui->setupUI(this);
307 1558971
>>58964
И как работать с кнопочками которые размещены на форме?
fail.mp43,1 Мб, mp4,
640x360, 0:53
308 1559017
>>52778 (OP)

>2 пик



В 2023 году С++ станет Го, и прекратит существовать.
309 1559025
>>58964
Нормальные люди не пишут на кутях.
310 1559047
>>59017
Ого, стоило одному шизику подавиться мацой - сразу же подъехал второй.
311 1559106
>>59025
Да, нормальные накидывают формочки в визуалке на шарпе
312 1559120
>>59106

> шарпе


Пидора ответ.
313 1559125
>>58732
В том то и дело что не знаю, какой расклад. Ну теперь понятнее стало. До этого фрилансил на другом языке и вообще трудоустроен был чисто формально. Вот думаю вкатиться в С++ или другой язык уже искать, посмотрел стату по зарплатам, вроде примерно одинаково все получают, а в случае с С++ предположу это будет поддержка говна мамонта. Высоконагруженный бек осилю, но опыта мало.
314 1559126
Аноны, буду очень благодарен, если вы подскажите, что и где надо статически слинковать, чтобы приложение qt не требовало дллок. До этого работал только в clion, там всего одну команду надо было прописать в cmake, а тут муть какая то.
315 1559133
>>59126
Статическая линковка qt предполагает покупки лицензии на qt. Увы
316 1559135
>>59133
Но ведь qt под гпл, а значит не надо ничего покупать
317 1559138
>>59135
под GPL только бесплатный qt
318 1559157
>>58971
m_ui->moyaKnop_ochka
Всё как обычно, имена кнопочек задаёшь прямо в designer

>>59138
Ну и что? Слинковал статически, открыл исходники
319 1559183
>>59138
Любой кьют бесплатен, всё равно никто не узнает.
Вопрос про Visual Studio 320 1559467
Прои создании программ на вижл меня достает то, что постоянно нужно создавать для каждой программы новый проект. Можно ли это как-то обойти?
Вопрос про Visual Studio 321 1559468
Прои создании программ на вижл меня достает то, что постоянно нужно создавать для каждой программы новый проект. Можно ли это как-то обойти?
322 1559471
>>59468
Пиздец, а как по-твоему работать без проекта?
Если ты очень ебанутый, можешь всё в одном проекте писать, но с разными конфигурациями, исключая при этом ненужные файлы из сборки
323 1559477
>>59468
Можно. Использовать gcc в консоли.
324 1559510
>>59468
Можно объединить несколько проектов .vcproj в одно решение .sln.
sage 325 1559546
>>58418
Внутри вектора такое же говно на указателях, но вектор нихуя не зеро кост. Как минимум пуш бек каждый раз выполняет лишнюю проверку. Вот я зарезервил 1 млн элементов, пушбекаю, и у меня 999999 раз пройдет бесполезная проверка на сайз != капасити.
326 1559592
>>59546
Хуя ты экономист.
Ты на IBM 5100 пишешь?

Бтв проблема push_back не в проверке size != capacity.
327 1559598
Как объявить общую статическую переменную/метод для класса с шаблоном? То есть чтоб для MyClass<int>, MyClass<long> итд они были общими?
328 1559601
>>59592
Судя по большинству постов здесь, плюсовики вообще пишут исключительно уберхайлоад и исключительно для уберслабого железа. Поэтому язык и уходит из прикладухи, что вся эта перформансопетушня отпугивает новичков.
329 1559623
>>59598
Сделать нешаблонный класс-член со статическими переменными/методами.
sage 330 1559638
>>59592
Я про то, что плюсы пропагандируют "не платишь то что не используешь", и при этом у нас до сих пор нет метода unsafe_push_back
331 1559645
>>59638
Так-то благодаря предсказанию переходов и какому-нибудь if [[__builtin_unlikely]] (size_ == capacity_), эта хуйня почти не будет влиять на скорость. Да и не так страшен пушбэк, как сортировка пузырьком после него..
332 1559658
>>59601
Крестослесаря прост, шараги где учат крестослесарей. Специфика пахомии. Так-то видел вакансии в самых разных сферах, буквально вчера кресты шли в дополнение к аналитике с биг датами с окладом 400k в месяц на руки.
333 1559671
>>59623
Разве этот класс-член не будет уникальным для каждого типа шаблона? В гугле пишут, что нужно наследоваться от класса со статическим членом.
334 1559674
>>59658
Чето я не видел такого, скинь вакансии.
335 1559678
>>59623
Ты пытаешься нас наебать. Это так не работает.
https://ideone.com/bVQ2lR
336 1559692
>>59598
Ну и говнище эти кресты, пиздец. Попытался повторить описанное, и при компиляции ругнулся даже не компилятор, а линкер нахуй.

https://ideone.com/cINLKC
337 1559727
>>59692
Нешаблонный базовый класс, например

>линкер нахуй.


Дык очевидно: статическая переменная должна где-то жить. То, что в классе - это объявление, но она также должна быть определена в какой-нибудь единице трансляции. Также не забываем, что каждое инстанцирование шаблона - это отдельный тип.
338 1559744
>>59678
А теперь попробуй не внутри класса определить класс со статической переменной, а снаружи, внутри инициализировав его экземпляр.
Теперь любой инстанс твоего шаблонного класса будут обращаться к классу снаружи с - о, чудо! - статическим членом.
Ты не просто не понял, как работает генерация кода в этой ситуации.

>>59671
Как вариант. Родитель - обычный класс, наследник - шаблонный.
Ещё можно внутрь класса положить указатель на глобальную переменную, но это пахнет плохо совсем.
339 1559813
>>59744
Нихуя не понял, тащи код. Так как это правильно делается по итогу? Проблема то реальная.
340 1559820
>>59813
Вот это истории. Если ты не понял, то

>Лабы идут нахуй


А если ты где-то работаешь - надеюсь, тебя нахуй уволят.
341 1559831
>>59820
Понятно все с тобой, хуйни насоветовал которая не работает, глобальные переменные блять, так еще и выебывается.
342 1559837
>>59831
Да кто ж тебе виноват, что ты слеп, глуп и не можешь погуглить и подумать? Конечно, анон с двача.
343 1559867
>>59692
static inline в твоем кейсе
344 1559948
>>59546
тогда вместо reserve и push_back ты можешь использовать resize и [], но тут надо смотреть какой вариант по итогу будет быстрее
в любом случае современный способ поднять производительность в новых плюсах - это использовать механику перемещения, а еще лучше в комбинации с in-place размещением (move-конструктор и emplace_back)
345 1559963
sage 346 1559981
>>59948
И как я по operator[] на месте сконструирую объект?
347 1559991
Вкатываюсь на с++ джуна и заметил немалое количество вакансий с QT. Сам же я только погроммирувал под М$. Перед собесом иди изучать или забить, не сольют сразу?
348 1560042
>>59991
Плюсы и кьюти это два разных языка. Не соглашайся на формошлепство, анон.
349 1560048
>>59981
не, ну "по месту" ты его и так не сконструируешь, тк resize заполняет контейнер с использованием конструктора по умолчанию
но, если у тебя в классе элемента контейнера написан move оператор присвоения, то присвоение rvalue временного объекта через [] произойдет при помощи механики перемещения
p.s. тебе не кажется что использовать сажу с твоими текущими знаниями выглядит несколько высокомерно?
350 1560049
>>59991
да, есть вариант конкретно задротить qt (посредством прочтения пары книг по qt и запиливанием пет-проекта)
ну и аплаится конкретно на вакансии связанные с qt, в этом случае почти наверняка устроишься, даже будучи без коммерческого опыта за спиной
но стоит учитывать что зп будет одной из самых низких в отрасли - тысяч 80 в дс, тысяч 60 в дс2
sage 351 1560052
>>60048

>resize


Кто сказал что я ресайз использую? Речь по моему шла о reserve. В принципе нормальный ответ мне уже выше дали, к чему тут костыли с рвалью? Да и мув без исключений сейчас пишут редко, разве что дефолтный поставить и надеятся что компилятор разберется.
к чему вообще был доеб до сажи я тоже не понял, она тред не топит и автоматом стоит
352 1560054
Зачем нужный модификаторы доступа? Почему нельзя обойтись просто структурами? Когда это вообще может быть необходимо?
sage 353 1560055
>>60052
Главное забыл добавить, при резерве operator[] к обьекту, у которого не начался лайфтайм - уб, ты либо теряешь в производительности в любом случае
354 1560057
>>60052
ладно, давай, студентик
пили дальше свою матрицу на голых указателях
уже неплохо что ты начал пилить диплом до нового года, прямо подвиг
355 1560059
>>60055
повторюсь, вместо того чтобы делать reserve и push_back, делают resize и [], это и позволяет не делать bound checking (о чем ты слезно и ныл, что мол это "медленно" и поэтому стандартный вектор - говно)
356 1560062
>>60057
А я ещё в техникуме свой диплом сделал за неделю на основе диплома из интернета по аналогичной теме, который мне дал куратор моего диплома.
sage 357 1560063
>>60059
То есть вызывать дефолт конструктор на весь ренж не медленно, да?
358 1560067
>>60063
такое имеет смысл делать если хранятся в контейнере не объекты а указатели (умные указатели) на объекты
ну либо если хранятся примитивные типы в контейнере
но, да, скорей всего и в этом варианте будет не быстрей

в любом случае ты зря доебался до того что выполняется bound checking при push_back, там же эта проверка быстрая, по сути там идет не проверка больше/меньше, а проверка на неравенство указателей, те программиский прием guard-значения

bool _Has_unused_capacity() const noexcept
{// micro-optimization for capacity() != size()
return (this->_Myend() != this->_Mylast());
}
359 1560069
>>60067
Перечитай мой первый пост. Я жалуюсь на то, что плюсы пропагандируют зеро кост, и при этом в одном из самых популярных контейнеров стандартной либы нет возможности сделать пуш_бек без проверок, что как-бы с зеро-кост слабо сочетается. А как там внутри реализовано это от компиля к компилю варьируется
360 1560073
>>60069
я тебе показал как делать вставку без bound checking в стандартный контейнер
обычными средствами контейнера, между прочим
никаких трюков
361 1560077
Как сделать стэк состандартными функциями стэка имея только иостреам и классы?
362 1560082
>>59638
vec.data() и делай что хочешь
363 1560101
>>59126

>Аноны, буду очень благодарен, если вы подскажите, что и где надо статически слинковать, чтобы приложение qt не требовало дллок.


В арчике для mingw есть qt5-base-static, в msys2 тоже готовый пакет идет. Под студию сам пердолься, собирай (но будь готов к тому, что какой-нибудь плагин неправильно скомпилируется, и придется вилкой чистить). В 5.13 статически слинкованое окошко с формочкой около 17 мегабайт, 8 после upx.
364 1560163
>>60052
А зачем они тебе? Используй просто пуш_бэк.
365 1560169
Я очень жёстко туплю, помогите кто-нибудь. У месть есть 2 текстбокса, в один я записываю цифры через пробел, жмякаю на кнопку и числа из первого выводятся во второй. Для этого нужно использовать стек обязательно. Я написал код, но числа выводятся В ОБРАТНОМ ПОРЯДКЕ. То есть, записываю я 1234, а он выводит 4321. Что мне переделать?

System::Collections::Generic::Stack<int> stk;
System::String^ str = System::Convert::ToString(this->txtIn->Text);
str+= " ";
int X, at, pos = 0;
at = str->IndexOf(" ");
while(at != -1){
System::String^ str1 = str->Substring(pos, at-pos);
pos = at+1;
bool res = Int32::TryParse(str1, X);
stk.Push(X);
at = str->IndexOf(" ", pos);
}
System::Collections::Generic::Stack<int> buf;
System::String^ str2 = "";
while(stk.Count){
buf.Push(stk.Peek());
str2+=System::Convert::ToString(stk.Peek()) + " ";
stk.Pop();
}
while (buf.Count){
stk.Push(buf.Peek());
buf.Pop();
}
this->txtOut->Text=str2;
}
365 1560169
Я очень жёстко туплю, помогите кто-нибудь. У месть есть 2 текстбокса, в один я записываю цифры через пробел, жмякаю на кнопку и числа из первого выводятся во второй. Для этого нужно использовать стек обязательно. Я написал код, но числа выводятся В ОБРАТНОМ ПОРЯДКЕ. То есть, записываю я 1234, а он выводит 4321. Что мне переделать?

System::Collections::Generic::Stack<int> stk;
System::String^ str = System::Convert::ToString(this->txtIn->Text);
str+= " ";
int X, at, pos = 0;
at = str->IndexOf(" ");
while(at != -1){
System::String^ str1 = str->Substring(pos, at-pos);
pos = at+1;
bool res = Int32::TryParse(str1, X);
stk.Push(X);
at = str->IndexOf(" ", pos);
}
System::Collections::Generic::Stack<int> buf;
System::String^ str2 = "";
while(stk.Count){
buf.Push(stk.Peek());
str2+=System::Convert::ToString(stk.Peek()) + " ";
stk.Pop();
}
while (buf.Count){
stk.Push(buf.Peek());
buf.Pop();
}
this->txtOut->Text=str2;
}
366 1560174
>>60169

>но числа выводятся В ОБРАТНОМ ПОРЯДКЕ


Ты представляешь что такое стек, да? Это яма. Ты засунул 1, засунул 2, засунул 3. Пока не достанешь 3, извлечь 2 или тем более 1 тебе не получится.
Тебе нужна очередь, а не стек.
367 1560178
>>60174
Я понимаю, что в данном случае очередь больше подходит, но в задании написано стек использовать.
368 1560180
>>60169
А, да, тебе достаточно заменить [str2=str2+System::Convert::ToString(stk.Peek()) + " "] на [str2=System::Convert::ToString(stk.Peek()) + " "+str2]. Или сделать то же самое на стадии считывания.
Просто конструировать строчку таким образом очень неэффективно, а использование очереди во много раз разумнее и это мне показалось более важной проблемой, чем твоё нарисованное ограничение.
369 1560181
>>60169
Через указатели на первый элемент и на вершину и с помощью них уже выводи. Ну а так, правильно написали для этого очередь используют.
370 1560182
Собственно если у тебя прям строчка есть, то можно вовсе без стека - размер изначальной строчки известен, размер конечной строчки такой же, можно без стека напрямую переписывать первую строчку во вторую. Зачем тут нужен стек или очередь - не понятно. Просто так для галочки, записать в него, а потом считать из него.
371 1560185
>>60169
Лабы идут нахуй.
372 1560187
>>60180

>[str2=System::Convert::ToString(stk.Peek()) + " "+str2]


Спасибо, теперь всё как надо.

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


Для этого и нужен, для галочки.
373 1560224
>>60169
да вы заебали, добавьте в шапку гайд постить код на pastebin, в посте кидать ссылку на код и прикреплять скриншот кода

петухи бля
374 1560255
>>60082
Ммм обожаю запах свежего убца по утрам
375 1560375
>>58644

>Она не работает с широкими символами.


Это плюс, а не минус.
376 1560726
кстати, теперь ведь есть еще один стандартизированный способ разбиения строки на токены, а именно в библиотеке регулярных выражений есть regex_token_iterator
377 1560727
>>60726
Несколько быстро работают регулярки в плюсах?
378 1560744
>>60169
Что за язык?
379 1560752
>>60744
похоже на С++\CLI

>>60727
Медленно пиздосий
380 1560766
>>60727

>Несколько быстро работают регулярки в плюсах?


скорее всего с производительностью, сравнимой с реализациями тех же самых регулярок в других языках программирования.. потому что регулярки ведь старая технология уже, как их оптимально реализовывать уже известно..
381 1560769
с регулярками в новом стандарте, кстати, щас стало можно по быстрому распарсить, к примеру, хмлку или json файлик..
те не полноценно распарсить а выдрать данные..
не надо подключать тяжелые библиотеки, тащить их в проэкт и все такое..
382 1560803
>>60769
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 n​erves 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 reg​ex parsers for HTML will ins​tantly transport a programmer's consciousness into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection wil​l devour your HT​ML parser, application and existence for all time like Visual Basic only worse he comes he comes do not fi​ght he comes, hi​s unholy radiance destro҉ying all enlightenment, HTML tags leaking from yo​ur eyes like liq​uid pain, the song of regular exp​ression parsing will exti​nguish the voices of mor​tal man from the sp​here I can see it can you see it it is beautiful t​he final snuffing of the lie​s of Man ALL IS LOST ALL I​S LOST the pony he comes he comes he comes the ich​or permeates all MY FACE MY FACE ᵒh god no NO NOOO​O NΘ stop the an​*​gles are n​ot real ZALGΌ IS҉ TOƝȳ THE PO​NY HE COMES
382 1560803
>>60769
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 n​erves 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 reg​ex parsers for HTML will ins​tantly transport a programmer's consciousness into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection wil​l devour your HT​ML parser, application and existence for all time like Visual Basic only worse he comes he comes do not fi​ght he comes, hi​s unholy radiance destro҉ying all enlightenment, HTML tags leaking from yo​ur eyes like liq​uid pain, the song of regular exp​ression parsing will exti​nguish the voices of mor​tal man from the sp​here I can see it can you see it it is beautiful t​he final snuffing of the lie​s of Man ALL IS LOST ALL I​S LOST the pony he comes he comes he comes the ich​or permeates all MY FACE MY FACE ᵒh god no NO NOOO​O NΘ stop the an​*​gles are n​ot real ZALGΌ IS҉ TOƝȳ THE PO​NY HE COMES
383 1560807
>>60803
дык выдрать то данные можно
грязно, быстро
384 1561322
Ананасы, задумал тута сделать такую штуку.
Реализовать паттерн наблюдатель для событий в программе, но чтобы у каждого коллбека была своя сигнатура.
Как такое провернуть? Gизъёбываться с шаблонами и тюплами?
385 1561331
>>61322
Не изобретать велосипед и брать кют. Там уже рефлексия во все поля, можешь узнавать имя метода или объекта который тебя вызывает например.
386 1561481
>>61331
Мне Qt не нужен, я не просил об этом.
387 1561488
>>61322
Зачем такое может быть нужно? Разве ты не явно контролируешь, где и чем эти калбеки будут вызваны? Багор какой-то.
388 1561507
>>61322
а как ты эти коллбэки будешь вызывать то из observable?
389 1561598
>>61488
Разные события и с ними идут свои параметры (или их может не быть вообще) поэтому сигнатура не всегда одинаковая.
Короче, пока решил сделать так: класс Event, в нём массив\вектор из строк, затем они будут преобразовываться в нужный тип (вроде int, float и тп).

>>61507
А хер их знает. Думал может быть как-то можно хранить и передавать тюплы.
390 1561616
>>61598
Что за бред? Сделай объект, который будет состоять из маркера и каллбека и оперируй им.
391 1561679
>>61616

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


Разверни свою мысль
392 1561687
>>61481
Qt всем нужно
393 1562220
Возможно ли реализовать список неопределённой размерности без помощи массивов?
394 1562223
>>62220
википедия / связный список
std::list
395 1562224
>>62223
А без list никак?
396 1562228
>>62224
Ну ебись с указателями как в Си
15778296758270.jpg74 Кб, 459x492
397 1562230
Нужен автокликер для одной игры. Юзать готовые - не вариант, ибо там вся реализация через апи ос, которые игра детектит. Надо как-то на аппаратном уровне имитировать нажатие клавишь. Нашел что-то про HID протокол, потом нашел libusb упрощенную обертку для управления этим протоколом. Пока особо документацию не читал. Перед этим хочу узнать, туда ли я вообще копаю? И насколько это реально сделать программно, не понимая и не зная как вся эта микроконтроллерная хуйня устроена и как она погромируется?
398 1562237
>>62228
Мне нужно это сделать с классами, а не как в Си.
399 1562238
>>62230
Драйвер свой напиши. Примеры драйверов мыши и клавы есть были в ресурс ките. Драйверы работают с другим API, займёт время разобраться. Х.з. какие у тебя задачи. Я вкорячивал в свой драйвер скрипт-энджин, которому подсавывал свои скриптики в рантайме.
400 1562242
>>62238
А драйвер этот, он же должен быть вшит в микроконтроллер? Т.е. мне надо еще покупать саму деталь, паять схемы какие-то? Свою клавиатуру я вряд ли рискну портить своими "драйверами". Мог сейчас хуйню написать, просто я вообще не имел с этим дела и имею 0 представления об этом всем. Но с классическим программированием я знаком и с/с++ владею.
401 1562245
>>62238
И еще, что за ресурс кит? Ничего не могу нагуглить, кроме каких-то утилит, которые входили в какой-то пакет мелкософта в 2003 году.
402 1562257
>>62230
Что за игра? Возможно сработает метод с очисткой флага эмуляции. Для этого потребуется зарегистрировать свой глобальный хук. В ином случае придется писать драйвер, а это задача не для ньюфага. Еще можно взять готовый драйвер, который предоставляет подобный функционал, такие тоже существуют.
403 1562258
>>62230
Vjoy не работает? У меня он во всех играх работал без подводных.
Можешь взять и перелопатить драйвер для планшетов ещё: https://github.com/hawku/TabletDriver - наверное там есть все нужные тебе куски кода.
404 1562270
>>61598
Хуйню изобрел. Джаваскрипт какой-то. Если у тебя несколько событий, о которых нужно уведомлять наблюдателей, сделай несколько сигнатур колбэков - по одной на каждый тип событий.
405 1562287
406 1562288
>>62230
тебе в /re/
407 1562327
>>62257
Аллоды онлайн. С хуками дела тоже не имел. Это что-то на уровне демонов? Насчет драйверов я вообще сомневаюсь, я не знаю как это все устроено и работает, соответственно и нагуглить вряд ли смогу. Я вчера пробовал искать туториалы по написанию драйверов и даже понять не смог, то ли я вообще нашел.

>>62258
Не пробовал, но пробовал около десятка других, ни один не работал. Только AutoHotKey кое как брыкался. Пару раз кнопка сработает и все. Пробовал обманывать, менять частоту случайным образом между нажатием - не помогло. Заметил только, если самому нажимать любую клавишу вручную, то тот скрипт снова пару раз отрабатывал и глушился. Явно защита какая-то в самой игре. Сейчас попробую с vjoy.
408 1562355
>>62258
Что это за vjoy вообще? Это какой-то эмулятор клавиатуры для геймпадов/джойтиков типа xpadder? Мне-то автокликер нужен был.
409 1562364
>>62355
Эмулятор джостика-мышки-клавы. Грубо говоря, если ты собрал на условной ардуине свой кастомный джостик для вертолёта и не хочешь писать к нему сложный драйвер с вниканием в winapi, то ты можешь за несколько строчек написать всё что тебе нужно через vjoy, и игра сможет понимать твой джостик.
Никто не мешает тебе использовать его без джостика для автокликера и вряд ли много какая игра специально блочит vjoy.

>Явно защита какая-то в самой игре.


Я бы смотрел одинаковая ли задержка между нажатиями, и чтобы между событием нажатия и отпускания было адекватное время, если бы делал защиту.
410 1562374
>>62364
Вот мой простой скрипт для нажатия клавиши z для autohotkey.
Loop
{
Random, sleepHold, 153, 257
Random, sleepWait, 1153, 5059

Send, {z down}
Sleep, sleepHold
Send, {z up}
Sleep, sleepWait
}

Значения, вроде, адекватные, но работать стабильно не хотят. А насчет vjoy, я мало что понимаю. Открыл конфигуратор, ничего полезного не нашел для себя. Потом еще погуглил, я правильно понимаю, что мне нужно написать некий "feeder", который надо будет каким-то образом скомпилировать и запустить средствами vjoy? Насчет документации, нашел только какой-то мануал в sdk, который не уверен, что вообще нужен мне. Речь, ведь, шла о просто vjoy, как о самостоятельной утилите, а сейчас выясняется, что, похоже, еще и какие-то пакеты/библиотеки надо докачивать. Я не жалуюсь, просто я не понимаю: в том ли я вообще направлении двигаюсь.
411 1562387
>>62374
пчел, в некоторых играх скрипты запрещены, так что ты либо пишешь свой драйвер, либо идешь нахуй из треда
мимокрок
412 1562388
Как вариант можно попробовать купить геймерскую мышку и туда напихать макросов
413 1562389
>>62387

>мимокрок


>идешь нахуй из треда


это еще че такое
если ты не заметил, то рандомные вейты там это как раз способ обойти некоторые "запреты на скрепты", работающие на детектировании одинаковых задержек, так что ты либо вникаешь в цепочку постов, либо идешь нахуй из треда
мимокрок
414 1562391
>>62387
Так я и не против. Вы мне импульс хотя бы дайте какой-то. Я никогда не писал драйверов и слету вот так понять не получается. Я даже не понимаю то ли я гуглю... Вот, мне про vjoy написали, это не скрипт, насколько я понял. Но на мои вопросы, касаемо него, пока еще не ответили.

>>62388
У меня она геймерская, но макросы не поддерживает. Хотя... Мб где-то в закромах древнюю х7 можно поискать...
415 1562397
>>62389
обезьяна, ты не понял. он либо обдрачивается сями и пишет свой драйвер по хардкору, если уж он хочет нечестно играть против обычных игроков, либо идет нахуй со своими шизофреническими проблемами с автохоткеем, потому что это оффтоп и щитпостинг.

>>62391

>Я никогда не писал драйверов и слету вот так понять не получается


в программерс тредах такой обсурд писать да ты совсем охуел
416 1562399
>>62397

>если уж он хочет нечестно играть против обычных игроков


Ой, блядь, началось... Я никак не связан с игроками и на их процесс игры вообще никак не влияю этими действиями. Ты какой-то обиженный, я смотрю. Не хочу с тобой общаться.
417 1562410
>>62230

>Нужен автокликер для одной игры


>>62399

>Я никак не связан с игроками



панимаешь, чмоха, просто так в игры не добавляют защиту от скриптов, ее вообще почти никогда не добавляют, значит скорее всего ты играешь в какую то онлайн дрочильню, где макросы создают такое преимущество, с которым разрабам приходится бороться. следовательно я делаю вывод, что ты пиздабол ебаный и идешь нахуй, даже не сказал какая игра, такая ты гнилая паскуда
418 1562412
Вообще, касаемо драйверов. Мне же нужен драйвер на стороне устройства, а не пк. Хотя, возможно, и там и там они потребуются. Драйвер на устройстве бы посылал сигнал нажатия клавиши, а драйвер на пк получал бы его и передавал ос. Я это понимаю пока что только так. Могу ошибаться. Но если все же я прав, то мне понадобится каким-то образом перезаписать драйвер микроконтроллера клавиатуры своим. А это может повлечь за собой не работающее устройство, которое я своими силами уже вряд ли смогу восстановить. Да и вообще, насколько я знаю, для установки прошивки на микроконтроллеры нужно доп оборудование, которого у меня нет. Короче, пока не особо все ясно.

>>62410
Ну и мерзкий же ты, а еще ты слепой.
419 1562415
>>62412

>перезаписать драйвер микроконтроллера клавиатуры


ты либо пишешь драйвер для своего кумпуктера и пользуешься им и не трогаешь устройство, либо делаешь эмулятор на хуярдуине и не трограешь драйвер. у тебя два выбора потому что свою клавиатуру за сотку ты перепрошить в этой вселенной точно не сможешь.
420 1562418
Как вкатиться в котрибученье в буст или в другие суперлибы? Я чувствую, что готов, но не знаю с чего начать.
421 1562432
>>62418
Посмотреть Антона Полухина или другие лекции по словам "контрибученье в буст". Но наверняка ты это уже делал, раз "готов".
422 1562477
>>62418
Открываешь гитхаб, выбираешь проект, чё-то пишешь, делаешь пулл-реквест и засовываешь его себе в задницу
423 1562510
>>62415
Я конечно не эксперт по драйверам, но..
на фоне этого треда ещё какой - написал аж целый один, хоть это и был курсач на втором курсе

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

Выглядит не так уж сложно, может даже получится отмахаться одним UMDF. А общение себя с драйвером для начала лучше организовать через файл, иначе заебёшься. И лучше заниматься всем этим в виртуальной машине, потому что на синие экраны ещё насмотришься.

Почитать про всё можно например здесь
https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/device-nodes-and-device-stacks
https://github.com/microsoft/Windows-driver-samples

В любом случае, это развлечение как минимум на неделю, так что лучше поищи человеческое решение.
424 1562512
>>62510
ах да, и ты

>идешь нахуй из треда


в любом случае, т.к. тебе в С-тред.
425 1562523
Обосрался с советов итт, пчел с аутохоткеем разобраться не может, а вы ему драйвера предлагаете писать. Это аутист даже не изучил доки ахк, а там ведь черным по белому написано, что по дефолту ахк использует жиденький метод инпута, который игра тупо не обрабатывает. Пусть выкидывает нахуй свое скриптоговно и пишет код на нормальном языке, напрямую обращаясь к винапи. SendInput, скорее всего в этой поделке мейлсру будет работать.
426 1562527
>>62510
Какой еще жиденький метод инпута? Все эти программы как раз и используют винапи. Только что в макс пейне проверил, там все работает, ибо защиты там никакой нет. А в том дерьме от мейлсру оно есть, внезапно. Не будет винапи работать, я в этом уверен.
427 1562528
>>62523
>>62527

>>62510
Я знаю. Я и сам особо не хочу сейчас ебаться с этими драйверами, ибо мне нужно побыстрее получить результат. Потом уже, для себя, можно было бы попробовать, в принципе, давно уже хотел попробовать, но руки не доходят. Про vjoy мне выше писали. Попробую пока его покурить. Хз что выйдет из этого. Если ничего не выйдет за несколько дней, то пойду спаяю какой-нибудь простенький генератор импульсов, который будет дрочить реле, лол. Надо было его, наверное, сразу собрать.
428 1562530
Какие свойства есть у xor? Нужно решить уравнение с ним в целых числах или установить что корней нет. Как понять что корней нет?
429 1562533
>>62527
Такой еще жиденький метод инпута, открой доки ахк и посмотри. Не те апи он использует, вместо эмуляции нажатия кнопки, посылает сообщение игре, которое игра не обрабатывает. SendInput будет работать, ставлю жопу. Если нет, то как я уже писал выше, игра скорее всего регистрирует свой глобальный обработчик, который обходится регистрацией своего обработчика поверх этого.
image.png22 Кб, 463x231
430 1562535
>>62530
покажешь уровнение?
431 1562542
>>62535
(x+a1) xor (x+a2) xor (x+a3) ... xor (x+an)= b
a, b дано
image.png6 Кб, 348x121
432 1562552
>>62542
в обратную сторону ксеришь.
(x+a1) xor (x+a2) xor (x+a3) ... xor (x+an)= b
x = (((((b xor (x+an)) ...) xor (x+a3)) xor (x+a2)) xor (x+a1)) - a1
433 1562553
>>62552
опечатался
x = ((((b xor (x+an)) ...) xor (x+a3)) xor (x+a2)) - a1
изображение.png131 Кб, 1366x768
434 1562560
ЧТо такое?
435 1562561
>>62560
Если стереть copy то все работает
436 1562563
>>62561
copy работает с итераторами
437 1562565
>>62563
Спасибо
438 1562577
Как оптимизировать программу и находить возможные ошибки? Вот у меня код по времени не проходит, хотя алгоритм как по мне оптимальный. Может быть у меня вобще ошибка не связанная с алгоритмом. Например перепелнение переменной
439 1562580
Быстро ли работает sort в c++?
440 1562581
>>62580
std::sort быстрее чем qsort из си
441 1562585
>>62580
N*log(N), всё остальное тебя ебать не должно
442 1562587
>>62585
>>62581
Спасибо. Тогда что делать с этим?
>>62577
443 1562589
>>62587
В смысле как? Дебагер в руки и искать, думать, тесты писать на простые и сложные случаи. Профайлеры, асаны, детектеры утечек, тысячи их.
444 1562590
>>62587

>алгоритм как по мне оптимальный


Ну а как оно по оценке О(...) по времени и по памяти, можешь примерно почувствовать? Или хотя бы подрочи тесты разного размера, чтобы узнать с какого начинает таймаутить.
445 1562592
>>62587
Ищи ботлнеки, что еще сказать, мы будто твой код можем прочитать
446 1562594
>>62589
>>62590
>>62592
Мне кажется проблема не алгоритмическая, а реализации. Прогнал макимально сложные входные данные из первой группы. Все ок. Может у меня из цикла например программа не выходит в том месте где должна. Как мне искать ботлнеки? Есть программы, которые помогут?
447 1562597
>>62594
берёш дебаггер
@
ставиш брейкпоитны в интересных местах
@
запускаеш
@
смотриш значения переменных


Судя по вопросу, это какое-то олимпиадное дрочево. Странно что вас там не учат отладчиком пользоваться. Полезно еще ассертов насовать везде.
448 1562599
>>62597

> Судя по вопросу, это какое-то олимпиадное дрочево.


В точку

> Странно что вас там не учат отладчиком пользоваться. Полезно еще ассертов насовать везде.


У меня с компом последнее время проблемы и кучу времени приходиться тратить просто на компиляцию и приходится испольщовать онлайн компилятор. Видимо придется. Спасибо.
449 1562602
>>62599
Если не хочешь ебаться с 20-гиговой M$V$, накати по-быстрому code::blocks. Лучшее в чем можно строчить однофайловые задачки.
Дебаггер там тоже хорош хотя уже 10 лет не могут сделать нормальное отображение stl
450 1562603
>>62602

> Дебаггер там тоже хорош хотя уже 10 лет не могут сделать нормальное отображение stl


Проиграл
451 1562609
>>62603
Я тоже. При помощи нечеловеческой ебли с питоном и подстановкой левого компилятора мне однажды удалось это починить. Но затем там ещё что-то поломалось.
Хуле делать - добавляем в 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?...

452 1562612
>>62609
но вообще в своё время я пилил олимпиады на чистом С, как деды воевали, и на эти крестопроблемы мне было поебать.
453 1562619
>>62597
Меня тоже не учили им пользоваться, но я сам придумал везде вставлять printf, а потом и cout. Оказывается, смекалочка уже и тогда работала. Надо было вместо вузика сразу ентерпрайз свой запускать...
454 1562622
>>62602
И нахуя ты посоветовал ему какое-то дерьмо динозавров? Почему сразу devcpp какой-нибудь не посоветовал? Или вполне себе годный vscode?
455 1562629
>>62622
Борланд С++ надо было советовать
456 1562636
Ребят, у меня куча объектов, связанных между собой указателями. Какие готовые решения, чтобы сохранить это все на диск, а потом загрузить с него? Может, в Boost что-то есть?
457 1562639
>>62636
Пиши руками сериализацию какую-то. Ничто тебе не поможет.
458 1562641
>>62636
Вообще нихуя не понял. Шизло какое-то. Нахуя тебе их сохранять, блядь? Запускай бинарник заново.
459 1562646
>>62641
Ты ебанулся? Вообще никогда нигде не нажимал на дискету?
460 1562652
>>62646
Подожди, я тебе щас своей дискетой на лоб твой нажму, только вытащу
461 1562678
>>62636
Делай мапку указатель-объект, при сохранении так и записывай указатель, при чтении достаешь реальный объект из мапки и обновляешь значение указателя
462 1562683
>>62636
тебе нужно сделать сериализацию
как минимум нужно сначала будет выбрать формат хранения - бинарный, текстовый, в базе данных, десятки вариантов
потом надо еще учесть ты будешь писать свой велосипед или использовать готовые библиотеки.. выбор всего этого зависит от того что за софт ты пишешь..
в бусте есть библиотека для этого, она так и называетсы boost serialization, но за ее удобство ничего сказать не могу
463 1562694
>>62594
Показал бы код, чтобы понять какого рода ошибки там могут быть и в какую сторону думать - вдруг ты там вовсе расстояния вместо квадратов расстояния сравниваешь, а при проходе по двумерному циклу используешь / и %, вместо двойного цикла. Без кода никто кроме тебя не скажет в чём проблема и что фиксить.
464 1562701
>>62533
Не работает sendinput, только что проверил. Код https://pastebin.com/rCcWQqgh

>который обходится регистрацией своего обработчика поверх этого.


Можно поподробней? Что значит регистрирует обработчик? И что значит обойти обработчик? Если это как-то связано с дизассемблированием, то я не думаю, что справлюсь. Я могу только ипконфиг прописать для взлома... Похоже, на реле собирать ключ для замыкания кнопки куда проще...
465 1562800
посоветуйте среду разработки C++ для линукс убунту
467 1562842
>>62810
Ящитаю, надо просто вначале отсортировать а, и выкинуть b к хуям.
468 1562845
>>62842
а не, порядок важен..
469 1562846
>>62800
unix shell + vim + gdb
470 1562858
>>62810
Есть мнение, что outp должен быть 0 (:15), и b[j] = a[j + l] (:19)
471 1562866
>>62701
Какой там античит? Твое не работает очень информативно. Отладь программу и посмотри почему не работает, для начала получи статус возврата и загугли его значение.

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexw WH_KEYBOARD_LL, WH_MOUSE_LL, очистить поле flags в соответствующих структурах.
472 1562868
>>62701
Тот код периодически нажимает z. Ты так и хотел или просто забыл установить wVk?
473 1562869
>>62800
QtCreator или CLion если студент
474 1562873
>>62858
Не. Вывод верный во всех тестах. Только превышение времени исполнения
475 1562877
>>62873
Если чо, у тебя индекс будет a[-1] при l=0.
476 1562878
>>62877
1<=l<=r по условию. R и l считаются с 1
477 1562886
>>62878
Попробуй тогда вынести b в начало. Сделай там reserve(n), а в цикле resize(). Чтоб не дрочил память туда-сюда.
478 1562890
>>62886
Хорошо. Это действительно даст ощутимый прирост? Я конечно сделаю так, поскольку выбора нет, но спрашиваю ради интереса
479 1562896
>>62890
И почему resize тем более несколько. У меня же размер b меняется быстрее выделения. Мне казалось ресайз просто создает еще один вектор на n элементов и переносит n элементов из массива с k элементами, а потом удаляет массив с k элементами
481 1562949
>>62866
Блядь, не работает. Ты понимаешь это слово? В этой игре, блядь, не работает! Везде работает, в играх/блокнотах/хуетах, но в этой игре НЕ РАБОТАЕТ. А знаешь почему? Потому что там ебучая защита, сука, и винапишное говно там детектится! Я тебе еще сразу об этом сказал.

>>62868
Да, так и хотел, wVk установлен на z.
482 1562955
>>62866
И что это за ссылка? Это и есть "регистрация обработчика"? На первый взгляд показалось, что это просто способ для общения с определенным окном без фокуса на нем.
483 1562983
>>62949
Я ебу что там в игре у тебя? Выясни для начала какая там защита, а потом уже думай, как ее обходить. Нет, блядь, буду пальцем в небо тыкать.

>>62955

> 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


Ты вообще читал или это тролинг тупостью?

Я ведь тебе сразу сказал, что нужно делать >>62257 , а ты тут срешь уже второй день и копротивляешься.
484 1562993
>>62983
Я читал, но нахуя отвечать не в свою цепочку постов? Я еще вчера тебе написал, ты ничего не сказал/не ответил. Потом ты пишешь от лица анона, который советовал регистрировать какие-то обработчики. Вопрос с дровами уже закрыт, я не стану их писать и тратить на них сейчас свое время. Я вообще пока ничем особо не занимался эти дни. Нет возможности пока сесть и дрочить доки да и вряд ли будет. Уже реально скорее соберу на ne555 какой-нибудь таймер и подпаяюсь к кнопке. Я не ебу какой в игре античит, я вообще сомневаюсь, что можно где-то найти эту инфу на это говно в которое играет 500 человек. А даже если и можно, то что это даст? Один хуй исходников нет и что там происходит на самом деле в коде не известно.

Насчет хуков эти хз, не особо пока понятно зачем это и как работает/что дает. Немного позже почитаю про них, попробую. Вон, вчера один тоже доказывал, что sendinput будет работать, с чем я был не согласен. И что в итоге? Тоже самое и хуков касается, если я вообще смогу разобраться и что-то внятное с ними написать.
485 1563068
>>62993
Это я тебе и писал, просто ты тупой как пробка. Если не хочешь ни в чем разбираться, то берешь вот этот готовый драйвер и внимательно читаешь его документацию. https://github.com/oblitum/Interception
одно и то же constexpr в разных файлах 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

если ничего не пишу в token.h

token.h(22,16): error C2065: 'null_char': undeclared identifier
token.h(22,16): error C2065: 'null_char': undeclared identifier
token.cpp(11,12): error C2065: 'null_char': undeclared identifier

Как сделать, чтобы одно и то же constexpr использовать в разных файлах?

MS Visual Studio 2019 Community
487 1563170
>>63130
Во-первых, extern const.
Во-вторых, проверь вот это, хотя для новых проектов должно быть включено по умолчанию.
https://docs.microsoft.com/en-us/cpp/build/reference/zc-externconstexpr?view=vs-2017
В третьих, inline constexpr прямо в заголовке, компилятор сам позаботится, чтобы ты odr не нарушил
488 1563203
>>62846
Откуда вы, ебланы, лезете
489 1563216
>>63170

>Во-первых, 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, если надо, и его включать всюду.
490 1563221
>>63216

> Не понял. Что куда


В хедер, в cpp'шник ничего писать не надо, только использовать. Только не забудь С++17 включить.
491 1563225
>>63216

> token.h


This.
Вообще, непонятно, что ты пытаешься сделать
492 1563241
>>63221 >>63225
Давай на простом примере. main.cpp:

#include "token.h"
int main() { char ch; std::cin.get(ch); switch(ch) { case '0': std::cout << "zero\n"; break; case null_char: std::cout << "no\n"; break; default: std::cout << "yes\n"; } return 0; }

token.h:
#include <iostream>

token.cpp:
#include "token.h"
void f() { char ch; std::cin.get(ch); switch(ch) { case '0': std::cout << "ZERO\n"; break; case null_char: std::cout << "NO\n"; break; default: std::cout << "YES\n"; } }

куда писать constexpr char null_char = '\0';
или inline constexpr char null_char = '\0';
что ещё куда писать
frog.jpg127 Кб, 697x993
493 1563246
sage 494 1563257
>>63203
Найс подрыв емакс-хрюшки.
495 1563260
>>63241
Хуйню какую-то написал. По-нормальному напиши, в чем задача заключается
496 1563261
>>63257
Какой блять вим, какой емакс в 2020 году, еблан
497 1563263
>>63261
Ты чего ругаешься? Кроме емакса с вимом разных вкусов толком то и нет ничего. Электронопомойки же фуфуфу
499 1563277
>>63273
А если собирать на каком-нибудь всратом тостере надо, мм?
500 1563282
>>63277
Тогда надо менять работу на ту, где не надо собирать на всратом тостере.
501 1563311
>>62228
Ладно. Как это сделать? Компилятор ругается, если я пытаюсь присвоить значение какой-то области памяти, на который указывает указатель, если в этой ячейке памяти не объявлена переменная. Как ещё можно сделать лист без библиотеки list, если не так?
502 1563313
>>63311

>Как ещё можно сделать список без библиотеки list


Поправил себя.
503 1563322
>>63311

Берешь и без задней мысли делаешь:

template<typename T>
struct ListElement
{
T data;
ListElement element;
};

template<typename T>
class List
{
private:
ListElement<T>
head;
};
504 1563328
>>63261

>Какой блять вим


Соснольный или гуёвый.

>какой емакс


Соснольный, обычный ванильный саморучно напердоленный, spacemacs, doom emacs.

Выбирай.
505 1563330
>>63322
С такой записью можно создать список из неопределённого заранее количества элементов? Как это работает? Уже встречал такой такое без шаблонов, но самого разбора работы такого кода так и не увидел.
506 1563335
>>63322
И да, у тебя звёздочки вакаба сожрала.
image.png7 Кб, 254x212
507 1563362
>>63330
Погугли же епт. Туториалы, тысячи их
тут вот на смартпойнтерах к примеру https://solarianprogrammer.com/2019/02/22/cpp-17-implementing-singly-linked-list-smart-pointers/

тут попроще https://towardsdatascience.com/linked-list-implementation-guide-16ed67be18e4 но с малоками ебучими. хоть new бы

Хранишь указатели на предыдущий и следующий, или только следующий элемент. При вставке алоцируешь память и прицепляешь куда надо (в хвост, в голову).

Кстати std::forward_list так и сделан https://github.com/microsoft/STL/blob/master/stl/inc/forward_list
508 1563364
>>63362
Я не знаю английского языка. У тебя есть на Русском что-нибудь?
510 1563377
>>63260
Есть

constexpr char null_char = '\0’;

Его надо использовать в разных файлах: main.cpp, token.h, token.cpp. Причём его надо использовать именно как известное на этапе компиляции выражение, чтобы его можно было использовать как case в switch, причём во всех файлах.

Как это сделать?
511 1563412
>>63277
Мне сложно придумать ситуацию, когда придется собирать на всратом тостере, кроме разве что совсем экстремальных ситуаций, когда рабочий комп сгорел нахуй, а времени позаимствовать у кого-нибудь лишний ствол ноутбук нет, нужно собрать здесь и сейчас. Правда встает вопрос, откуда у вас тогда взялся всратый тостер.
Олсо, вимом и имаксом удобно пользоваться, когда нужно отредачить пару-тройку строк где-то на удаленной машине, но если строк много, то проще перекинуть файл на рабочий комп, отредачить и перекинуть обратно.
512 1563461
>>63377
Разобрался. Я включал хэдер, в котором constexpr, в другой хэдер.

Переформулирую вопрос более глобально: хэдеры в хэдеры включать плохая практика? Я совсем начинающий.

На работе легаси-говно, там хэдеры включаются и в сорсы, и внутрь других хэдеров.
513 1563465
>>63461

>хэдеры в хэдеры включать плохая практика?


Нет, почему?
514 1563469
>>63465
Потому что вылезла вот эта проблема с constexpr, что их инклюдить можно только в .cpp . Иначе не компилируется.
515 1563497
>>63461

> На работе легаси-говно, там хэдеры включаются и в сорсы, и внутрь других хэдеров.


Блядь, а как ты хотел? Пиздец, мой ор наверное весь офис через океан услышал
516 1563540
Какие есть библиотеки которые могут делать за меня часть работы? Например в питоне легко переводить число в строку и обратно. Есть срезы строк. Очень удобно, но медленно
517 1563550
Как сделать перебор сочетаний?
518 1563556
>>63540
Наверняка в бусте/Qt есть.
1578035965339.jpg686 Кб, 810x2576
519 1563612
>>63364
Блядь, я удивляюсь терпению анона, который тебе все эти ссылки дал.
Неужели так сложно написать в ебучий гугл "реализация односвязного списка c++" и нужно ебать мозги другим анонам своей тупостью?
quattro with mug.jpg18 Кб, 450x338
520 1563639
>>63364
Как раз повод выучить.
521 1563670
522 1563673
>>63540

> Например в питоне легко переводить число в строку и обратно.


Ты думаешь это так просто? Если не нужно учитывать локаль - тогда да, просто. std::to_chars, std::from_chars.

> Есть срезы строк


Посмотри, что там c++20 предлагает
523 1563703
>>63670
Python
524 1563708
>>63550
Не совсем тебя понял, но мб std::next_permutation - это то, что ты ищешь.
525 1563709
>>63673
Спасибо
526 1563713
>>63708
Это немного не то. Для него 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 как разные последовательности
527 1563716
>>63713
Тебе быстро ннада?
Если нет - то применяй next_permutation к вектору и копируй его содержимое в мапу с ключом-сетом.
То есть у тебя сначала вставится сет (1, 2), потом ты скопируешь вектор (2, 1) в сет, там он отсортируется и станет сетом (1, 2) и при вставке в мапу дубля не будет.

Говно, но быстро и на коленке.

Бтв, господа, вы щупали уже модули от майкрософта?
Я смог скомпилить со стандартными, но свои даже по туториалу не робють. И интеллисенс умирает после первого же #import.
Или пока нет смысла это трогать?
528 1563717
>>63713
Тогда надо перебирать маски, а не сами значения.

https://ideone.com/anVmk6
529 1563719
>>63673
to charts и from chars выглядят очень удобно, жаль половина компиляторов не поддерживает это. Вот чем меня раздражает c++, то это раздутость. Куча функций и хз что использовать. Берешь одну, потом оказывается что она параметр string не принимает и приходится переводить в c_string(). Пиздец какой то
530 1563720
>>63717
Спасибо
531 1563729
>>63716
Хотя сет сетов лучше будет.
Единственный момент - я не помню, может ли быть map<set<int>, smt_other> или set<set<int>>, там же отношение порядка требуется, вроде как.
532 1563746
>>63729
Спасибо большое
JYcsdpiGq3o.jpg255 Кб, 1366x768
533 1563747
Каа исправить?
534 1563753
>>63747
sum += static_cast<int>(b[j] - '0');
535 1563756
>>63753
Аааайй бля че за хуйня. Почему так сложно нахуй?
15681431506340.gif564 Кб, 800x430
536 1563763
>>63747
Ради таких мометнов и стоит читать тред..

Хоспади, блять, помоги. Ору так, что мать скорую вызвала. А на strlen(b.c_str()), да еще в цикле, вообще чуть от ифаркта не откинуся.
Штош ты делаешь, содомит. скорей бы тебя отчислили
537 1563764
>>63756
Это же ещё сишный прикол.
Чтобы из символа цифры получить инт - нужно код нуля вычесть из нее и привести к инту.
Можно статик каст опустить, будет неявное приведение все равно.

А вообще atoi просто принимает не символ, а строку, поэтому у тебя ошибка. Да и лучше тогда std::stoi использовать, он прям с std::string работает и с разными базами, хоть из троичной переводи в инт.
Разве что она бросает исключение и во второй аргумент записывает позицию, в которой случился косяк.
538 1563766
>>63763
Бля, а я даже не заметил, это же охуенно.
539 1563780
>>63763
Можно объяснить прикол?
540 1563785
>>63780
Ну насчет strlen понял. Где еще смешно?
541 1563797
Что аноны могут сказать по поводу JUCE? В моей конторе, на нескольких проектах кроме juce ничего не разрешают использовать.
542 1563798
>>63785
Напиши хоть, что сделать-то просят в задании на лабу.
По скрину непонятно нихуя, кроме любви к постоянным вызовам to_string от одного значения.
цикл по i не в том направлении
543 1563800
>>63753
sum +=(int)(*(b.c_str()+j) - '0');
003.jpg320 Кб, 1737x1038
544 1563840
Ананасы, нужна ваша помощь.

Благодаря быстрому интернету я не имею возможности поставить VS 2017 или 2019 для компилирования swift shader. Раздобыл четвёртую версию, она работает, но вот беда, мамин прогер почему-то поставил потолок для ядер всего шестнадцать, хотя для приличия надо 65536 минимум.

Есть тут сверхчеловек, который его поменяет, скомпилирует и кинет готовые дллки сюда?

Ссылка на исходник
https://github.com/google/swiftshader

На картинке то, что нужно изменить, возможно, где-то ещё, но я не нашёл, для начал этого достаточно будет.
545 1563843
>>63840
Блядь, там ещё в сравнении забыл 16 на 65536 поменять. Вобщем на картинке то, что должно быть после замены
546 1563848
>>63840
а build tools не вариант скачать? они ж немножко весят
547 1563855
>>63848

Возможно, я cmake на вынь 10 попробвовал поставить и тут меня ждало поражение, ведь даже ему нужны какие-то куски от 2017 и 2019 ВС.
548 1563888
>>63763
А чего не так? У класса string по-моему нет аналогичного метода.
549 1563893
>>63888
std::string a = "hello";
auto l = a.size(); // или a.length
550 1563895
>>63893
Блин, точно. Странно было бы не реализовать такую базовую вещь. Пойду почитаю побольше.
551 1563911
.mak makefile в vs проект никак не конвертируется что-ли?
552 1564010
>>63716

> Бтв, господа, вы щупали уже модули от майкрософта?


Вообще, там странно всё. Cppreference говорит, что в msvc нет модулей, хотя они там очевидно есть.
В тред призывается нвидия-кун
553 1564020
>>64010
Официально нет, это экспериментальная фича, как asan.
Но на msdn тутор есть, хотя у меня не удалось. Но это и я могу быть дебил, а не у них что-то не так.
554 1564042
>>64020
Да вроде по тутору они роблять вполне, с /experimental:modules. Мило выглядит. А чо у тебя не так?
555 1564080
Я верно понимаю, что при каждом вызове строки Node *nd = new Node; в nd записывается НОВЫЙ адрес? Если да, может ли он случайно повториться?
Screenshot20200103-202202Dashchan.jpg39 Кб, 934x401
556 1564119
>>64042
Вот я это сделал все, если импортил std.core - то тоже мило выглядело и компилилось, но сразу ломался интеллисенс.
А свои модули делать вообще не получалось, хотя все по тутору организовал и с расширением .ixx(вроде такое, не помню точно).

моча, ты совсем охуел? Где я спамлю или вайплю?
557 1564129
>>64080
Может быть просто "nd = new Node"? Ты не можешь два раза написать "Node *nd".

>в nd записывается НОВЫЙ адрес?


Да.

>может ли он случайно повториться?


Только если предварительно освободишь старый.
558 1564147
>>64129

>Может быть просто "nd = new Node"? Ты не можешь два раза написать "Node *nd".


Эта строка в классе, класс циклически вызывается в маин.
559 1564212
>>64119
Они где-то в блоге писали, что intellisence не работает с модулями
560 1564218
>>64212
Жаль, подсветка кода и подсказки - хорошая и удобная вещь.
561 1564226
>>64119
Модули официально не поддерживаются. Все остальное нерелевантно
562 1564284
>>64147
всмысле так?
for (...)
{
MyClass();
...
}

или так
for (...)
{
MyClass с;
...
}

Тогда если ты не делаешь delete nd в деструкторе а я на 80% уверен что не делаешь, то у тебя течет память.
563 1564408
>>64284
По ляжкам у тебя течет
564 1564411
Unsigned char arr[100] ;
Unsigned Int x = (unsigned int) & (arr[50]);

Кто нибудь может подсказать что происходит во второй строке кода?
565 1564418
>>64411
Тебе зачем это знать?
image.png6 Кб, 610x120
566 1564426
>>64411
Проверить не быстрее, чем спрашивать?
Интерпретируешь указатель на 50 ячейку, как на unsigned (50-53 ячейки) (почему они у тебя с большой буквы?).
567 1564429
>>64426
вообще-то ничего там не интерпретируют, а просто небезопасно усекают адрес в формате ptr64 в uint
568 1564436
>>64429
Там же две звёздочки затёрлись из-за того что борда уже пять лет не может позаимствовать обособление через `` из дискорда.
569 1564439
>>64426
>>64429
Спасибо за информацию.
Unsigned с большой буквы потому что пишу сейчас со смартфона.
sage 570 1564486
>>64436
Сейчас бы думать, будто это в дискорде придумали.
571 1564487
Как проверить является ли один вектор подмножестврм другого без учета порядка?
572 1564491
>>64487
Если на коленке, то отсортируй и найди set_difference
573 1564494
>>64486
Да блять на форумах с PhpBB в 2003 году нормальное форматирование уже было.
574 1564504
>>64486
Да не важно где придумали, как будто это как-то меняет что-то.
575 1564514
>>64494
KOGDA уже двач переедет на пхпбб???
576 1564604
Я создаю динамически сотню кнопок. Как мне работать с их слотами?
577 1564620
>>64604
Речь о qt если что. Вообще, при нажатии на кнопку, мне нужно чтобы она вызывала сигнал передавая в него свои координаты.
578 1564683
Хорошая ли идея сделать вектор из варианта?
579 1564746
>>64683
Где-то в недрах osquery видел такое. В принципе норм.
580 1564750
>>64746
А нет, там был list<map<string, variant>>
581 1564785
>>64750
Устроили блять джаваскрипт.
582 1564793
>>64683
Тогда уж сразу вектор из void* делай, чтобы наверняка выстрелить себе в ногу.
583 1564889
Является ли хорошим тоном написать в начале класса private:, если у меня в начале класса идут приватные объекты? Или можно с этим не замораживаться? Если действительно нужно так писать в классах, то почему в структурах обычно не пишут в начале public:?
584 1564905
>>64604
Без задней мысли подключаешься, qt сам всё сделает. Сигналы посылай как обычно
emit somethingChanged(newPt);
585 1564913
>>64905
В смысле блять? Вот есть класс mainwindow, он у меня содержит вектор векторов содержащих указатели на кнопки. При нажатии другой кнопки этот веутор векторов заполняется динамически созданными кнопками. И где мне взять сигналы и слоты этих кнопок?
586 1564923
>>64913
Если ты их как-то создаёшь, значит можешь там же подключить к ним слоты
587 1564954
>>64889
я пишу классы

class cls {
public: ...
private: ...
}

чего и тебе желаю.
588 1564962
>>64954
# define public public:
# define private private:

class MyAwesomeClass {
public int a;
public int b;
private int x;
private int y;
};
589 1564964
>>64962
Сишарп тред два блока вниз
590 1565040
Почему два абсолютно одинаковых проекта запускают программу по разному? Нахуя?
591 1565151
>>63068
Короче, время появилось, решил попробовать с хуками ебаться. Первое с чем столкнулся. SetWindowsHookExW возвращает 0, погуглил и понял, что надо получить дескриптор к пути dll, где эта функция описана, как-то так

>HINSTANCE dDLL = LoadLibrary(TEXT("c:\\path\\something.dll"));


Но в msdn сказано, что LowLevelKeyboardProc находится в windows.h
Вот текущий код регистрации хука

>HHOOK dProc = SetWindowsHookExW(WH_KEYBOARD_LL, LowLevelKeyboardProc, NULL(тут dDLL нужен, по идее), processId);



Какую dll загружать тогда?
592 1565209
>>65151
Убрал конкретный PID, путь к адресу функции указал в текущем модуле, теперь SetWindowsHookExW возвращает отличное от нуля значение. Код https://pastebin.com/npprysU8

Не понимаю. Разве не должна колбек функция вызываться при нажатии кнопки в любом процессе и выводить на экран консоли процесса, который этот хук запустил "!!"?
593 1565230
>>65040
Потому что ты долбоёб. Проекты у него запускают программы, блядь.
594 1565236
>>65230
Пошел нахуй токсик тупорылый.

Спрашиваю у нормальных анонов. Один и тот же хелло-ворлд, но msvc каждый проект компилит по разному. В настройках все одинаковое, вообще ВСЕ одинаковое. Почему так?
595 1565242
>>65236
Ну скинь тогда файлики своих проектов
596 1565262
>>64411

>Кто нибудь может подсказать что происходит во второй строке кода?


Нарушение т.н. strict aliasing rules.
597 1565302
>>64923
Не работает
df.push_back(new QPushButton("f",this));
df[j]->setGeometry(50i,50j,50,50);
df[j]->show();
connect(df[j], &QPushButton::click, [=](){QLabel lbl; lbl.setNum(i*j); lbl.show();});

Пишет QObject::connect: signal not found in QPushButton
598 1565320
>>65302

> Пишет QObject::connect: signal not found in QPushButton


А ты не очень умный, раз не понял, что click - это не сигнал
599 1565460
>>65320
Один хуй не работает
600 1565481
>>65460
Проблема оказалась в этом

> QObject *senderObj = sender();


> lbl = new QLabel("f");


> lbl->setText(senderObj->objectName());


> lbl->show();


Если убрать предпоследнюю строку, все работает и лейбл выводится. Почему не ясно.
601 1565513
>>65481
Ты parent лейблу установил?
вообще, не еби мозг, создай сразу всё, а в рантайме меняй видимость
602 1565548
Что можно почитать по криптографии/криптоанализу с привязкой к плюсам?
603 1565550
>>65513
Нет, не установил, да и думаю не в этом проблема. Сейчас интереса ради сделал такое

> QObject *senderObj = sender();


> senderObj->setObjectName("ef");


И тоже не работает.

> вообще, не еби мозг, создай сразу всё, а в рантайме меняй видимость


Не особо понимаю как мне это поможет на самом деле, создавать то все равно придется в цикле.
604 1565555
>>65550
Что ты вообще сделать хочешь?
.jpg57 Кб, 864x480
605 1565558
>>65555
Сапер
606 1565561
>>65558
Вот тут ещё более непонятно, тебе ведь размеры поля известны. Закинь на ideone свой код
607 1565564
>>65561
Было бы что кидать, я ведь только начал делать
https://ideone.com/187xKb

А размер поля может ведь задаваться пользовательский
608 1565566
>>65564
Лучше создай в своём окошке qgridlayout, ему установи размеры и в него запихивай кнопки, тогда можно избавиться от setGeometry и show
609 1565567
>>65566
Это в планах. Сейчас все же хотелось бы разобраться с сигналами.
15780017549220.jpg98 Кб, 1080x1045
610 1566268
Анон, который советовал хуки писать для перехвата глобальных обработчиков, ты тут? Нужна помощь.

На текущий момент написал глобальный хук, который обрабатывает нажатие клавиши в любой программе, просто информируя об этом в консоль.
Вот код (1 вариант): https://pastebin.com/47cPEVHy

В чем была твоя основная идея? Я пробовал использовать SendInput в этом обработчике, чтобы зациклить нажатие, но игра все равно не воспринимает его. Я мог не правильно понять тебя, поэтому уточняю.
Вот (2 вариант): https://pastebin.com/YGnQYCHx
611 1566274
>>66268
Или мне надо было переопределить эту функцию LowLevelKeyboardProc из какой-то системной библиотеки, указав третий параметр функции SetWindowsHookEx?
612 1566324
>>66274
Короче, сейчас переписал без хука (хотя, и с ним тоже работало), используя только цикл с sendinput, но отправляю не виртуальные коды клавиш, а скан-коды. Игра обрабатывает только пару таких sendinput'ов и перестает обрабатывать остальные, пока я сам не нажму любые клавиши на клавиатуре, после чего все повторяется снова. Текущий код: https://pastebin.com/MzzFXeZm
613 1566372
Почему я не могу найти разность между двума указателями на разные типы? Почему компилятор вообще ебет какие там типы? Пусть молча берет чертовы адреса и вычитает.
614 1566400
>>66268
Для начала пронумеруй все глобальные обработчики и посмотри устанавливает ли игра свой. Может они вообще драйвером блокируют инпут, я не знаю. Скажи какой там античит. Я тебе уже сказал про железобетонный способ с использованием готового драйвера. Качаешь, устанавливаешь и шлешь запросы этому драйверу, он их обрабатывает и нажимает кнопки.
615 1566405
>>66372
Потому что у языка такие правила, блеать. Не нравится - пили обёртку над указателями со своей собственной арифметикой, раз так хочется выстрелить себе в ногу.
616 1566413
>>66400
Я не знаю какой там античит. Гугл не блещет точной информацией. Могу только предположить, что там какой-то lifeguard. Но и могу предположить, что он был когда-то в игре, а сейчас его нет, ибо их сайт куда-то там переехал и, вроде как, не занимается защитой игр, судя по этой инфе https://liveguard-security.com/allods-online/?_vlg=1 Короче, хз.

>Для начала пронумеруй все глобальные обработчики и посмотри устанавливает ли игра свой.


Т.е.? Как их пронумеровать и определить что там игра регистрирует/не регистрирует?

Насчет драйвера, этот? https://github.com/oblitum/Interception Я бегло проглядел, мне не понравились картинки и я решил начать с хуков. Не хочу мешать все в кучу, ибо и с тем-и тем я дел не имел. Но попробую...
617 1566418
>>66372
(void*)ptr
618 1566429
>>66400
Ну, вроде, поставил драйвер. Как с ним теперь связаться? Документации никакой не нашел, а та что на гитхабе, там просто какое-то лицензионное соглашение. Никаких других "геттинг стартед" не могу найти в гугле.
619 1566431
Сап, как распределить работу сокета в Qt, а именно слот readyread?
У меня сначала в программу отсылается имя файла, а затем сам файл, но слот не понимает, как их обрабатывать
Файл передаётся частями, т.е несколько раз срабатывает readyread
Как разграничить загрузку файла и получение имени файла?
Помогите, пожалуйста
620 1566432
621 1566439
>>66429
А, т.е. мне надо interception.h подключить и используя его функционал, методом тыка написать свое, скомпилировать и запустить?
.png7 Кб, 440x190
622 1566512
Блядь, сейчас бы ебаться с подключением библиотеки... В чем проблема может быть?

Вот мой код: https://pastebin.com/2zQtLemp

Вот сам хидер interception.h: https://pastebin.com/NN4Bdefj

Папка с проектом:

>пик



Компиляция с порта mingw:

>g++ main.cpp -LC:\\Users\\Vladislav\\Desktop\\driver\\interception.lib -o d



Результат компиляции:

>C:\Users\VLADIS~1\AppData\Local\Temp\cc8oTiHO.o:main.cpp:(.text+0xe): undefined reference to `interception_create_context'


>C:\Users\VLADIS~1\AppData\Local\Temp\cc8oTiHO.o:main.cpp:(.text+0x1e): undefined reference to `interception_destroy_context'


>collect2.exe: error: ld returned 1 exit status

.png7 Кб, 411x152
623 1566518
>>66512
Засунул .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
624 1566534
>>66518
Все, разобрался. Забыл нужный dll (x64) в папку с проектом засунуть, вместо x86.
625 1566547
Такой вопрос. Если мне нужно проверить указатель pX на то, что он указывает на какое-то значение, т.е. pX != nullptr, я обычно пишу так: if (!pX) {}
Сейчас наткнулся на то, что опытные программисты используют вместо этого if (!!pX). Прочитал, что это тоже самое, что и pX != nullptr. Т.е. вроде как и !pX и !!pX означают одно и то же. Зачем два восклицательных знака?
626 1566550
>>66518
О, моя любимая ошибка номер "ноль хуй соси пять нулей семь блядей"
https://www.youtube.com/watch?v=4E-hv74reEM
627 1566556
>>66400
>>66534
Написал что смог понять, возможно, там вообще бред, но я хз как можно вслепую писать, не имея базы знаний в этой области/опыта. Документации найти не смог.

Код с монологом о размышлениях: https://pastebin.com/yjs61ES4

Требуется помощь.
628 1566605
>>66556
Бля, я слепой. Нашел документацию http://www.oblita.com/interception Но один хер, нахуя так прятать? В readme было сложно добавить ссылку? Завтра уже почитаю.
629 1566621
>>66605
Что-то проще совсем не стало... Документация крайне нулевая, инфы мало. Вообще не понимаю как зациклить нажатие клавиши... Вот, как я понимаю, в цикле while мы блочим проверку условия строчкой

>device = interception_wait(context)


, пока по заданным фильтрам не придет нужное состояние

>INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP


Допустим, я нажимаю кнопку, срабатывает KEY_DOWN, функция interception_receive что-то там возвращает > 0, после чего оказываемся в теле цикла, где устанавливаем нужную клавишу и посылаем ее драйверу. Перед отправкой у клавиши всегда состояниеDOWN или UP, что по идее должно триггерить функцию interception_receive автоматически, зацикливая, но этого не происходит. А так же не понятно, что делают остальные фильтры
INTERCEPTION_FILTER_KEY_NONE,
INTERCEPTION_FILTER_KEY_ALL,
INTERCEPTION_FILTER_KEY_E0,
INTERCEPTION_FILTER_KEY_E1,
INTERCEPTION_FILTER_KEY_TERMSRV_SET_LED,
INTERCEPTION_FILTER_KEY_TERMSRV_SHADOW,
INTERCEPTION_FILTER_KEY_TERMSRV_VKPACKET

Но я и с ними пробовал, не работает. Работал с кодом из примера https://pastebin.com/WjjhERiS
630 1566879
По MSVS C++CLI вопрос.
Я правильно понимаю, что Application::StartupPath появляется генерируется уже на этапе выполнения и мне в строку подключения к бд соответственно надо задавать в обработчике Form1Load?
Программа находит бд и работает, а конструктор ругается на исключение, когда я пытаюсь исправить строку подключения oledb внутри метода InitializeComponent формы.
В книжке нет полного кода, но как я понял, он задает статический путь в свойствах компонента на форме, а в коде уже в обработчике меняет строку подключения.
изображение.png25 Кб, 787x749
631 1567047
Вот хочу решить. Есть у меня интерфейс MySubsystem.
Пользователь наследуется от него (класс Fu)
При этом мне неизвестно количество и тип аргументов в конструкторе пользовательского класса Fu. То есть я не могу написать базовый констуктор в MySubsystem на все случаи жизни.

Теперь что я хочу. Я хочу запретить прямой вызов констуктора Fu f(10), потому что оно ведет к ошибкам.

Как сделать?

Чтобы можно было производный от MySubsystem класс вызывать только так Fu::Create(10), независимо от того как описан констуктор в производном классе

Да, можно в классе Fu - Fu(int ni) сделать приватным, но это плохое решение, потому что этот Fu будет писать другой человек, а значит он конечно же забудет об этом нюансе и сделает его публичным
632 1567052
>>67047
p.s. констуктор Fu(int ni) нельзя сделать приватным - быстрофикс
633 1567060
Может есть сайты которые в "идеальных условиях" прогонят мою программу с нужными мне входными данными раз 100 и выдадут среднее время исполнения?
634 1567062
>>67047
Попробуй добавить базовый класс с protected конструктором в MySubsystem
635 1567073
>>67062
если написать так:
protected: MySubsystem() = default;
то это ничего не даст, потому что у Fu свой констуктор (Fu(int)).

И нельзя написать protected: MySubsystem(int) = default;
потому что MySubsystem не должен знать какие аргументы будут у пользовательского класса. Там может быть int/string или стопятсот классов - вся фишка тут именно в том что у Fu может быть любые аргументы
636 1567076
>>67047
Добавь проверку в конструкторе, если один аргумент и он равен 10, то возвращай пустой класс.

мимо диванный
637 1567092
>>67073

> И нельзя написать protected: MySubsystem(int) = default;


На самом деле ты можешь написать шаблонный конструктор, по аналогии с методом Create.

А вообще, подумай хорошенько, потому что выглядит как очередной велосипед. Что сделать-то хочешь?
638 1567130
>>67092

>>На самом деле ты можешь написать шаблонный конструктор


нет. потому что повторю - MySubsystem не должен знать о количестве аргументов его наследников. И у каждого наследника своя логика в конструкторе

>>что выглядит как очередной велосипед


Велосипед чего?

>>Что сделать-то хочешь?


Вот больше кода https://ideone.com/dTXvd9

В чем фишка? В коде есть основные системы которые за что-то отвечают - менеджеры(Foo1, Foo2, Foo3). В этом примере эти системы создаются в одном экземпляре - похоже на синглтон (но в реальном проекте Subsystem подключается к Context, и этих контекстов может быть также много, так что ни синглтон, ни тем более глобальные переменные тут не подойдут)

Далее я хочу получать доступ к этим системам через GetSubsystem(). (GetSubsystem<Foo1>())
GetSubsystem() должен выдавать мне объект класса из текущего контекста.

Subsystem - это просто базовый интерфейс который задает базовое поведение системы и ее привязку к контексту. Чтобы не копипасить кучу кода инициализации.

При этом - этот код - библиотечный, то есть я не знаю сколько будет этих классов Foo. Какие у этих классов будут аргументы и т.д.

Код уже работает, но есть архитектурные проблемы:
- пользователь этого кода может не читать документацию и вызвать коструктор вручную (а не через Create()) - это ошибка.
- (хотелось бы что-то сделать чтобы не писать вручную все эти Destroy() - но идей пока нет)

Еще раз повторю - почему не сделать тупо все это в конструкторах - потому что слишком дохрена копипасты, и потом - этот констуктор надо где-то вызвать, то есть надо где-то создать переменную, как-то ее привязать к текущему контексту чтобы память не потекла... короче такое решение хреновое.
639 1567139
>>67130
ну или так постараюсь объяснить:

- есть контексты (context). в любой момент времени активен только один контекст (но он может передать активность другому)
- к этим контекстам привязаны подсистемы (subsystem)
- подсистемы должны быть правильно инициализованы. Отложенная инициализация по вызову не пойдет - подсистемы должны инициализироваться при старте, а не при первом вызове (потому что там тяжелый код чтобы его во время основной работы вызывать)
- и да, подсистемы могут не проинициализоваться - но это не является ошибкой (и тем более не исключение) - то есть даже при неиницилизированной одной системе всё остальное должно работать (кроме доступа к этой системе)
- в любом месте кода должен быть доступ к нужной подсистеме активного контекста (GetSubsystem())... При этом я должен получить доступ только к самой подсистеме, а не всем системам что есть (это уже будет узел в лапше - не надо такого)
- должна быть возможность добавлять произвольное количество подсистем. Интерфейс подсистемы по всем законам ООП не должен знать ничего о том кем будут его наследники.
640 1567144
вообщем все это ради вот этой строки:
GetSubsystem<Foo1>().Bar();
641 1567236
>>67130
Сложно запретить пользователю создавать объект, если он конструктор объявил public.
Можно попробовать передавать первым параметром в конструктор Subsystem какой-нибудь объект-пустышку, которую пользователь не может создать, но тогда ему нужно будет прописывать в конструктор какой-то левый параметр, иначе сам не сможешь создать.
Проще писать в доках, чтобы руками не создавали или делали конструктор protected
642 1567264
>>67139
Используй динамический полиморфизм, зачем тебе весь этот шаблонный пердолинг?
643 1567306
Бомжур, бандиты

Кто тут объяснит, по какой такой причине методы, определённые внутри тела класса автоматически становятся inline?

Моя версия: чтобы не было их потенциальных переопределений в разных транслейт-юнитах. Насколько я прав по 10-ибальной шкале?
644 1567334
>>66547

>pX != nullptr, я обычно пишу так: if (!pX) {}


Ты проверяешь как раз обратное
645 1567359
>>67306
Тут есть нюанс: не обязательно эти методы будут встраиваться. Это будет зависеть от настроек компилятора. На этапе линковки уже может либо произойти встраивание, либо просто линкер выкинет все определения этого метода из единиц трансляции, оставив только одно.
646 1567360
>>67359
Если обобщать то для членов-функций действуют те же правила, что и для свободных функций. Ты можешь в .h файле разместить определение свободной функции, пометив его inline. В зависимости от настроек компилятора будет сделано либо встраивание этой функции, либо на этапе линковки выкинутся все определения за исключением одного единственного.
647 1567372
>>63540
"срезы" строк -
std::string имеет доступ по индексу и функцию-член substr
но вообще то std::string - контейнер, предполагается работа с ним через итераторы и алгоритмы стандартной библиотеки шаблонов
648 1567376
>>67372

>число в строку и обратно


std::stringstream и to_string ?
649 1567468
650 1567621
Аноны, как будем добиваться больших зарплат для байтоёбства? Почему шарписты получают в среднем больше?
651 1567644
>>67621
учи английский, только так
652 1567648
>>67621

> как будем добиваться больших зарплат


Очевидно, что перекатом та шарп.
653 1567698
Где бы найти стажировку второкуру в новосибирске..
654 1567699
>>67698
У вас же там полно в академгородке
655 1567704
>>67699
До него 2 часа езды из города.
656 1567789
>>67621
Надо везде писать какое кресты сложное говно и продвигать для обучения в вузах питон. Меньше крестовиков - больше спрос - больше зп.
657 1567806
>>67789

> Надо везде писать какое кресты сложное говно и продвигать для обучения в вузах питон. Меньше крестовиков - больше спрос - больше зп.


Больше вкатывальщиков в говноязыки - меньше ЗП в говноязыках - больше специалистов с опытом перекатываются в плюсы - меньше ЗП у существующих специалистов
658 1567860
Сложно ли написать мультиплеер для старой стратегии?
659 1567868
>>67860
Да, очень сложно.
660 1567870
>>67868
А так хотелось. Спасибо
661 1567871
>>67860
Да попробуй чо сложного то, заодно какой-нибудь boost.asio покачаешь
662 1567872
>>67871
Я просто в инете почти не нашел инфы по этому поводу. Меня главным образом волнует как получать информацию о модельках и как их отрисовывать
663 1567938
>>66372
Разность между указателями это не разность "адресов".
664 1567941
>>66372
Наверное тебе в ПТУ сказали, что сложение указателя с числом это прибавление к адресу числа*(размер указываемого типа), поэтому ты думаешь что разность между указателями должна быть определена как разность между адресами.
Но в ПТУ тебе напиздели про то, что такое сложение указателя с числом.
665 1567945
>>67938
А что же это?
668 1567968
>>67952
Он сработает если в игре есть игра по локальной сети. В моем случае в игре мультмплеера нет ни в каком виде.
669 1567983
Лол, думал щас libpng прикручу быстренько, чтобы картиночку сохранить, а у там них обработка ошибок при помощи setjmp блядь! Наркоманы ебучие. Так и представил, как я щас посреди всей хипстоты с эксепшенами и смартпоинтерами ебашу setjmp.
670 1567984
>>67860
Сложно и трудоёмко. Проблема в том, что надо как-то портировать логику сингловой игры на сервак. Обычно юзают один из трех подходов:
1. тупая трансляция, либо вообще p2p - клиенты договариваются между собой, вся логика работает на них самих. Открывает путь читерству, но работы намного меньше.
2. (частично) эмулировать логику клиентов на серваке - трудоемко, надо много реверсить и отлаживать. Будет много багов и несоответствий.
3. Гонять несколько клиентов на серваке/серваках, по одному на одного игрока в матче. Работы меньше, эмулировать ничего не надо, читерить сложней, но мощностей надо дохуя.

Общий принцип такой
1. реверсишь игру, находишь что надо хукать и дёргать, чтоб ей управлять
2. пишешь клиентскую часть, которая берет под полный контроль процесс игры и коммуницирует с сервером
3. пишешь серверную часть, одним из трех подходов выше.
671 1567986
>>67984
еще p2p это привет рассинхроны. Нирикамендую в общем. В целом и 3 вариант от них не спасет.
672 1567998
>>67968
Можешь считать, что это невозможно. Настолько, что будет проще ремейк игры написать, мне кажется, если это старая стратегия.
673 1568001
>>67983
Двачую блядь. Ещё если png битый, boost Gil до 1.72 крашит программу нахуй
674 1568010
>>67984
Спасибо за ответ. Мне кажется напиание сервера не самая сложная задача. Для меня сейчас выглядит непонятным как, например отрисовать человека. Вот я получил от клиента сообщение о том, что он хочет заспавнить на таком месте такого юнита. Как мне это сделать? Потом же эти юниты должны взаимодействовать с моими. По сути клиент берет на себя задачи, которые обычно делает бот. Похоже на модоелсто. Где взять инфу по этому поводу? Хотелось бы на примере увидеть работу
675 1568012
>>68010

>Мне кажется напиание сервера не самая сложная задача.


Как раз написание сервера и реверсинг игры это самая трудоёмкая задача. Хукать игру много ума не надо.

>Вот я получил от клиента сообщение о том, что он хочет заспавнить на таком месте такого юнита. Как мне это сделать?


Надо пользоваться логикой самой игры и дёргать её когда тебе надо. Отреверсить игру (читэнжином, отладчиком, дизассемблером и т.п., туториалов миллион, в основном на читерских сайтах, как правило динамический анализ и проход по структурам будет быстрей дизассемблинга), и найти внутри неё стабильный адрес (или сигнатуру) функции спавна юнита. Это делается сложнее чем кажется, ибо надо 100% убедиться что это именно функция спавна юнита, это может быть совсем не очевидно. Затем внедрить код клиента внутрь процесса игры (техник миллион), и вызывать эту функцию когда тебе надо. Это уже дело техники. На самом деле всё зависит от устройства конкретной игры, там может быть не функция спавна, а надо произвести кучу действий, или еще что-то сделать. Также можешь зайти в asm-тред.
676 1568013
>>68010
В дополнение к написанному

>Хотелось бы на примере увидеть работу


Посмотри код MTA:SA, например.
677 1568015
>>68012
>>68013
Спасибо большое
678 1568464
Наконец закончил делать сапер. На все про все ушло меньше 300 строк. Хотя вышел лютый говнокод, вся программа разместилась в классе mainwindow. Буду теперь приводить к удобоваримому виду.
по началу хотел сделать, чтобы мины генерировались так, чтобы не было возможности зайти в тупик, но это слишком сложно
679 1568635
Анон, у меня к тебе сейчас три очень серьёзных вопроса:
Когда я пишу
cout << "huj";
, компилятор автоматически создаёт массив, в котором последовательно содержатся коды символов h, u и j? Или нет?
Когда я пишут cout << this << "huj";
, компилятор выводит адрес самого первого символа строки?
Адрес чего выводится, когда я пишу
cout << this;
?
680 1568653
>>68635
Читать любую книгу для ньюфагов, срочно. This он выводит в cout блять,
681 1568657
>>68653
Ты можешь нормально ответить, а не как пидор?
682 1568663
>>68657
а что тебе ответить, когда ты вообще полную абсолютную хуйню несешь? Тебе надо не вопросы задавать, а книги читать.
изображение.png23 Кб, 649x558
683 1568667
>>68663
Сам и читай, а потом расскажешь, как там случай на картинке объясняется, у тебя же дохуя свободного времени. А я чисто поинтересоваться зашёл, а не книги твои дурацкие читать.
изображение.png26 Кб, 640x645
684 1568669
685 1568670
>>68635
Фигня в кавычках - строковый литерал. Это область памяти только для чтения, считай, что это тип const char*.

>cout << this << "huj";


Оно выведет адрес объекта, в методе которого написано такое (в виде 0x1234) и после него допишет huj.

>cout << this;


>адрес объекта, в методе которого написано такое



Совет про книгу хороший. Проблема не в том, что ты не понимаешь конкретно этого, а в отсутствии общего понимания что тут происходит - по крайне мере так оно выглядит судя по вопросу. С сотворением общей картины поможет только книга, а ответы на вырванные из контекста вопросы тут лишь навредят.
686 1568674
>>68635
Начни с Кернигана и Ритчи (или C Programming: A modern approach, говорят годно)
687 1568678
>>68674
Ты не понял, мне вообще эти твои книжки не нужны. Когда каникулы закончатся и пройдёт сессия, я просто спрошу у препода, который мне всё это разжуёт и в рот положит. Если, конечно, мне тут то же самое не сделают раньше того времени. Вопрос этот для меня не столь критичный, так что отвечать или нет — твоя воля.
688 1568698
>>68678

> в рот положит


В это скорее.
689 1568703
>>68678

>Анон, у меня к тебе сейчас три очень серьёзных вопроса:


>Вопрос этот для меня не столь критичный

690 1568715
>>68703
Мне это просто внезапно стало интересно, но незнание всего этого мне прямо сейчас никак не помешает. Хотя хотелось бы, чтобы анон просто по-человечески по каждому пункту ответил хотя бы парой слов по теме, а не ссылался на какие-то там книги. Это же тред для обсуждения языка, а не тред ссылания на литературу по каждому вопросу. Ну неужели там так долго надо объяснять?
691 1568745
>>68464

>слишком сложно


А хули ты хотел, NP-полная задача!
692 1568870
>>68715
Да, блядь, это фундаментальные особенности языка.
Если ты не хочешь это понимать и читать книгу - то съёбывай из своей шараги в поварское училище и пеки кексы.
Хотя там тоже желательно книги с рецептами читать.
693 1568878
>>68870
У меня душа лежит к выпеканию аж пиздец, только после нового года дважды выпекал охуенные овсяные печеньки, которые похвалила вся моя родня и какой-то знакомый моей мамки. Но в наше городское поварское училище был конкурс из дохуя двоечников на одно место, так что чтобы дома как сыч не сидеть и не сойти с ума от одиночества, пришлось поступить в универ учиться печь говнокод. Ты прям пиздец угадал мои основные интересы.
694 1568886
>>68870
Зато смотри какой я умненький пекарь оказался, всего за один вечер вникнув в суть только лишь односвязных списков, забил на чтение кода двусвязного списка тут
https://pro-prof.com/forums/topic/реализация-связных-списков-на-с
и запилил свой собственный двусвязный список. И это работает!
https://ideone.com/xGYgo4

Оценишь? Мне не помешает мнение более опытного проградриста.
695 1568890
>>68886
И да, конечно же я попросил сравнить мой код с кодом с сайта, чтобы увидеть здесь в мой адрес что-то вроде "малаца, хорошо сделал" и потешить своё ЧСВ.
696 1568926
>>68890
Теперь поменяй int на какой-нибудь char[8192], сделай функцию, которая внутри себя создаёт список из миллиона-двух элементов и вызови ее несколько раз.
А потом расскажешь, что нагуглил, чтобы исправить.
Ебать как я люблю названия переменных.
697 1568930
>>68926
Не, я не настолько ебанутый. Не.
698 1568987
>>68926
Да ладно нормальные названия. Даже с префиксами по кодстайлу, кек.
Нормальная лаба, я бы сказал. Ни к чему не приебаться, кроме того что память течет.
нахуй ты в ideone джаву выбрал-то? Main.java:1: error: illegal character: '#' #include <iostream>
699 1568999
>>61322
Сигнатура одна - передавать базовый Event. Потом двойным диспачингом находишь правильный обработчик своего эвента.
700 1569022
>>67983

>libpng


а какой-нибудь libpng с++ wrapper не гуглил?
может есть
701 1569035
Почему у меня qt все время при сборке проекта ругается что moc был изменен? Забелся уже
702 1569052
>>69022
Да, я нашел один, правда так и не пробовал. Ещё есть либа DevIL, вроде неплохая. Но я в итоге сделал через виндовское апи
https://docs.microsoft.com/en-us/windows/win32/wic/png-format-overview
703 1569094
Сап, где можно потренироваться с STL? Ну типо задачи под него заточенные. А то так получается что могу реализовать свой стек/очередь, но про встроенные вечно забываю.
704 1569111
>>69094
Самое простое: в тот момент, когда тебе нужно что-то сделать хитрое, подумай: "а нет ли этого в STL?" и иди курить cppreference.com или cplusplus.com.
Скорее всего ты найдешь там ответ на свой вопрос.

А так - можешь cookbook от Яна Галовица прочесть. Там не всё разобрано, конечно же, но примеры полезные есть.
Например, что мне доставило, перенаправление cout в файл в нужной области видимости.
705 1569118
Есть ещё книга пиздатая, Professional C++ 4th edition
706 1569387
>>68926
А как сделать так, чтобы не текло?
707 1569523
>>69052
хуяси. Я думал win32 изкоробки только bmp умеет.
708 1569558
>>69387
Почитай за деструкторы, там найдешь объяснение, почему может течь память и как это исправить.
709 1569909
Подскажите, чому я не вижу проперти checked у QPushButton-а? Не могу на него сослаться, ругается, что нет такого свойства. Хотя оно должно быть, т.к. QPushButton наследует у QAbstractButton-а.
710 1569925
>>69909
Как ты на него ссылаешься?
Попробуй QToolButton
711 1569942
>>69925
Хочу сделать массив с состояниями кнопок.
Пишу что то типа
buttonsState->append(&button->checked)
а он мне говорит, что у button нет свойства checked.
712 1570029
>>69942
Ты хочешь хранить у себя указатели/ссылки на свойство, чтобы потом его можно было читать/менять?
Они же для того и придумывались, чтобы ты этого сделать не мог.
Если уж так хочется, храни коллбеки на метод isChecked...
713 1570030
>>70029
То есть свойства вообще трогать нельзя? Ок.
714 1570036
>>70030
Можно конечно, но не так, как ты это хочешь делать.
Есть методы is и set, вот их и дёргай, иначе всё сломается к хуям
715 1570053
>>70036
Спасибо за инфу. Я нашел способ получше. Оказывается в Qt есть специальный класс QButtonsGroup, сунул кнопки туда, все работает.
716 1570694
недавно понял что каким-то образом Qt и др идэ как-то понимают как собрать проект из нескольких cpp файлов, и как-то так у них получается не нарушать поля видимости.
717 1570697
>>70694

>поля


области
718 1570713
>>70694
Что по-твоему сложного в вызове компилятора для каждого из файлов?

> как-то так у них получается не нарушать поля видимости.


За этим должен следить ты, а не компилятор
719 1570902
Как делать тесты в Visual Studio 2017? Кое-как разобрался с Google Test, но обозреватель тестов даже не видит мой тест.
720 1570940
>>60375
Это всего навсего ваше личное мнение.
721 1570977
Анон, мне надо, чтобы кто-то проверил мою лабу на предмет утечки/неутечки памяти.
https://ideone.com/FoO2OY
Проверишь? Это линейный двусвязный список.
722 1571009
>>70977

>>>>>>>>>>>>>>>>>>>>>>Лабы идут нахуй

723 1571010
>>71009
Ты скозал? Если ты скозал, то ты идёшь нахуй.
image.png16 Кб, 730x277
724 1571013
>>71010
Девочки, читаем шапочку <3<3<3<3
725 1571014
>>70977
Таки при завершении времени жизни самого списка его узлы не удаляются. Надо в деструктор запилить цикл для очистки.

~spisok()
{
while (u_golova)
{
uzel* u = u_golova;
u_golova = u_golova->u_sled;
delete u;
}
}
726 1571016
>>70977
Ух еб твою мать.
Ладно, уже лучше, но потенциально утечки все равно есть.
727 1571019
>>71014
Ну и нахуя ты ему не просто спалил проблему, да ещё и код написал?
728 1571020
>>71019
Потому что это тред про C++ и вопросы/ответы по нему, а ты тут только про хуи пишешь.
729 1571021
>>71019
Я не он >>71014, кстати, я задавший вопрос.
730 1571025
>>71014
Я читал где-то, что если деструктор пустой, то компилятор сам разберётся, что там удалять/освобождать. Это не так?
731 1571042
>>71020
Ты о чем вообще? Или таблетки опять забыл выпить?

>>71021
Тогда сорян, с деструктором верно.
>>71025
Детектор нужен, простыми словами, если где-то есть динамически выделенная память, иначе все ок.
Или если необходима какая-то особенная логика, чекни std::shared_ptr.
732 1571119
Есть ли разница между
Complex operator + (Complex const &obj);
и
Complex operator + (const Complex &obj);?
Если есть, то какая
1578857329955.jpg746 Кб, 1079x700
733 1571132
>>71119
Йосуттис поясняет.
734 1571146
>>71042
Что служит детектором?
другой студень
735 1571149
>>71132
спасибо
736 1571159
>>71146
Детектор моего скудоумия, так как я и не понял анона, который на меня наехал, и набрать нужное слово не смог.

Деструктор, конечно же.

>>71020

>а ты тут только про хуи пишешь.


Так сказано же

>Лабы идут нахуй


Потому я тебе хочу не сразу все рассказать и помочь, а направить на нужную мысль.
737 1571175
>>71159
Т.е. деструктор это просто функция по сути, реализовывать тебе ее самому чтобы очистить память, если сам выделял, так?
738 1571203
>>71175
Да, это функция, которая будет вызываться при выходе из области видимости(можно и руками, но я не знаю, когда это в самом деле может потребоваться).
То есть для
class C
{
C() = default;
~C()
{
std::cout << "\ndtor";
}
};
int main()
{
{
C c;
//Тут будет вызван деструктор
}
std::cout << "\nend";
return 0;
}
Вывод будет
dtor
end
Хотя деструктор ты руками не звал.

И да, если ты для переменной внутри класса выделил память через new - то ее нужно освободить через delete.
739 1571219
>>71203
Все, я понял, спасибо. Так-то я читал о деструкторах, но не помню, чтобы именно эту особенность упоминали, а она ведь ключевая.
740 1571242
>>71219
На cppquiz много вопросов, каким-либо образом связанных с деструкторами.
Да и вообще полезная штука, мне помогло в какой-то момент.
741 1571251
>>71242
Мне тоже нравится этот сайт, но мои знания пока хромают, если говорить откровенно.
742 1571296
>>52778 (OP)
Есть одна йоба, с большим количеством пф алгоритмов и им подобных. И в определенных ситуациях она подлагивает пк, а точнее инпут - мышь подвисает, что сразу чувствуется. Как это работает? Почему? Общая нагрузка на цпу низкая, сторонние процессы вроде браузера, звука не виснут, лагает именно мышь.
743 1571304
>>71251
А это как с билетами ГИБДД.
Сначала отвечаешь неправильно на 80%, читаешь верные ответы и через некоторое время уже проходишь на 100% все тесты.
744 1571321
В чем смысл итераторов? Зачем методы векторов принимают в качестве аргумента итераторы, а не номера элементов?
745 1571332
Научите пользоваться перегрузками.
https://ideone.com/0lsJfF
Вот есть условный класс, я описал там какие-то конструкторы и операторы присваивания и хочу перегрузить операцию сложения.
Но вместо того, чтобы работать эквивалентно функции add, перегрузка создаёт временный A по адресу +28 (и соответственно память выделяется под 4 объекта вместо трёх) и вызывает оператор присваивания.
Рука тянется написать, A& operator+(...), но я не могу написать в теле функции A temp, а потом прописать return temp для такого случая. И я не могу писать this->arr=... ; return *this; - потому что такое изменит одно из слагаемых.
Работает как функция add, только если написать сразу A a=b+c, но такое не подходит, если у меня уже есть три объекта с выделенной памятью.

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

>>71321
Чтобы был одинаковый интерфейс для векторов, списков и деревьев, которые не умеют в обход через номера элементов, ежжи?
746 1571338
Чем инкапсуляция не сокрытие? Ну, хотя бы отчасти. Это мемас какой-то?
Ньюфаг
747 1571339
>>71332
Тащемта operator+ надо делать через временный объект и operator+=, внутри которого ты будешь изменять объект класса, от которого вызываешь метод.
А operator+ и должен возвращать временный объект.

Об этом есть глава целая в "Объектно-ориентированное программирование на C++".
748 1571340
749 1571342
>>71296
А с ОЗУ что? Обычно если памяти не хватает, мышка начинает люто лагать.
750 1571344
>>71332

> move семантика без noexcept


Пиздец.
751 1571346
>>71342
С запасом.
752 1571351
>>71339

>и должен возвращать временный объект


Зачем такое нужно тогда, если оно просто ради красивого внешнего вида создаёт временные объекты, когда мне нужно всего лишь 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 на первом попавшемся примере.

Угу, прочитаю твою главу, но пока что пролистал и нужного мне синтаксического сахара там не обнаружено.

>>71344
Зачем там noexcept, если я не использую нигде исключения, и не использую стандартную библиотеку или ещё что-то?
https://ideone.com/71jojy - так лучше, теперь доволен? Я даже мейну поставил noexcept.

Пиздец это исключения и то что мне ко всем функциям надо noexcept прописывать, хотя должно было быть наоборот, то что к функциям с исключением нужно прописывать except, а все остальные по умолчанию считаются noexcept. Больные ублюдки.
753 1571382
Зачем нужны геттеры и сеттеры, если переменные в поле видимости всего класса можно сделать приватными, а в публичной части просто вызывать их из функций? Тогда ведь в маин через точку будут видны только функции в паблике.
754 1571383
Ну, то есть не вызывать переменные, а манипулировать ими в публичных функциях.
изображение.png53 Кб, 325x342
755 1571384
Вот здесь, например, по идее вообще можно без GetName обойтись, строка name и так будет видна для SetName.
756 1571395
>>71351
У тебя оператор присваивания вызывается и в случае a = b + c, и в случае a = b; a+=c.

>Зачем временный объект


А как ты себе представляешь колбасу из a = b + c + d + e + f?
Ты уверен, что во всех абсолютно случаях разница во времени будет такая же? Это у тебя такой класс, в случае другого класса значения могут совсем по-другому отличаться.
Ты в дебаге проверяешь время работы? Если да - то молодец, ага.

>noexcept


Затем. Компилятор для реализации перемещения должен быть уверен, что конструктор не выкинет исключение. А если ты не указываешь это явно, проверять он не обязан.

>Наоборот


Ты оптимистичен, компилятор и комитет - пессимистичен. Тебя потом набутылят за ущерб компании в случае багованного кода, а им спасибо скажут: "ух как предусмотрели, мы это ещё на стадии компила/тестирования отловили!"
Да и слово except в C++20 вроде как deprecated будет.
757 1571403
>>71383
Ну если тебе не надо читать переменные-члены класса - то пожалуйста, не делай для них геттеры.
758 1571456
>>71395

>как ты себе представляешь колбасу


И то верно. Сказать как особый случай, особую оптимизацию для случая из двух слагаемых язык не поворачивается. Ну и ладно, не очень то и хотелось.
Написал же, что с -O3.

Лучше бы слово try deprecated стало - бесполезная концепция и вроде как не только я её избегаю.
759 1571561
>>71456
Да, ты прав. Я проебал момент, что либы не используются, тогда -O3 в дебаге будут те же, что в релизе, сорян.

>try


Ну хуй знает, кто-то активно обрабатывает так исключения, кто-то нет.
760 1571569
>>71382
Но ведь ты только что и описал геттер.
>>71384
Тебе где-то в программе например нужно просто получить значение из поля класса, ты же не каждый раз его задаешь.
761 1571756
>>71456

>я её избегаю


Ну и напрасно. Если эксепшенами не пользоваться, то можно сразу половину языка депрекейтить. C++ без них вообще слабо раскрывается.
762 1571841
>>71321
В том, что это гораздо более мощная концепция, чем какой то номер элемента. На какой номер элемента по твоему указывает итератор создаваемый back_inserter ом?
763 1571846
>>71841
this.

>>71321
Посмотри вообще на шаблонный класс итератора, на type_traits. В отличие от указателя ты куда больше инфы из итератора можешь вытянуть.
764 1571930
>>71841
back_inserter наряду с хуевой тучей других inserter-ов - просто костыли для обхода соглашения, что алгоритмы из стандартной либы не могут изменять размер контейнера. Соглашения, которое сделал сам комитет, а потом такой "бля а как нормально коллекции тогда юзать? На нах вам инсертеры", и это все при том, что в ассоциативных контейнерах число элементов уже может изменяться.
Весело пиздец, хочу чтобы стратусрус стал моим дилером
765 1571959
>>71930
У тебя очень поверхностное мышление. Итераторы вообще не обязаны быть связаны с контейнерами.
766 1572014
>>71959
Зато я в мамашу твою глубоко проник))))) Приводи примеры, аут, а не губошлепь понапрасну
767 1572050
>>72014
Вот теперь точно не буду, папа.
0207a0ecdda7dc8c43420080c582cdf1.jpg185 Кб, 786x305
768 1572117
>>68667
>>68669

>spisok


>golova


>etot


>uzel


>stek


>...


>А я чисто поинтересоваться зашёл, а не книги твои дурацкие читать.


Тред 1С-параши дальше по коридору, уебок.
769 1572120
>>70053
Расскажи подробнее.
770 1572221
>>1572195
Так PascalABC.NET вроде как активно развивается, не?
771 1572224
>>72221
Это сюда >>1572195
772 1572226
>>72224
Да блядь.
>>1572205
773 1572314
Умоляю. Как оптимально получить все сочетания? Время 4 утра нахуй. У меня tl на задаче. Нагуглить не могу решение. Дайте где почитать прошу
774 1572316
>>72314
http://rosettacode.org/wiki/Combinations#C
откапал такое решение. Оно точно самое оптимальное?
775 1572507
>>71959

>Итераторы вообще не обязаны быть связаны с контейнерами.


итераторы ввода-вывода
итераторы регулярок и итераторы токенов регуляров
еще что-то?
776 1572518
Как в дереве найти путь от одной вершины к другой?
777 1572521
>>72507

>итераторы ввода-вывода


вернее итераторы потока и итераторы буфера потока
поправка
778 1572526
>>72518
Короче придумал. Не надо уже
779 1572532
У меня есть переменная int a = new int* [];
Я хочу передать в функцию не весь массив, а только указатель на него. В аргументе я должен указать тот же тип, что и a, ведь a не сам массив, а только указатель на него и в любом случае передается указатель. Верно?
780 1572539
>>72532
Не будь быдлом, используй std::array или gsl::span
781 1572547
>>72539
array вроде нельзя динамически менять. А второе я воббще хуй знает че это
изображение.png115 Кб, 1366x768
782 1572566
Я его не понимаю
изображение.png114 Кб, 1366x768
783 1572573
Думал звездочку не там поставил, но нет
784 1572574
>>72573
Почему ты пишешь way->, если way не указатель?
И почему твоя среда не исправляет это? У меня сама (по нажатию какой-то клавиши) исправляет точки на -> и наоборот, если я опечатался.
785 1572576
>>72574
Но в первом же случае way указатель. Ошибки те же
image.png9 Кб, 973x206
786 1572577
Вот. И Ctrl+Space исправляют это.
787 1572579
>>72577
Почему это не работает в первом случае, когда way указатель?
788 1572583
>>72579
Я не знаю, наверное потому что у тебя мусор вместо ide.
У меня работают оба варианта, если указать корректную ./-> и корректный тип в push_back.
789 1572587
>>72583
Спасибо.
790 1572589
>>72587
Но это не ответ же.
Код бы весь показал, вдруг у тебя на первой строчке что-то не то написано. Он у тебя жалуется на ошибку в пятой строчке, но это же дичь какая-то? Если бы там не было using namespace, то он всё-равно должен был бы другую ошибку указать. И даже если бы ты переопределил тип vector - даже тогда он жалуется на то что это не шаблонный тип, а не на < и >.
792 1572598
>>72594
Бля. Перенес using namespace std вверх и все ок.одна ошиьбка понятная осталась
793 1572600
>>72598
Угу, ну ты и тип, лол. До переноса оно писало: no template named 'vector'
После переноса остаётся только предупреждение, что FindInTree не возвращает return.
794 1572611
>>72600
Еще вопрос. Не могу передать graph в функцию. Говорит чтение из недоступной памяти. Заранее большое спасибо
795 1572613
>>72611
Прости. Поспешил. Не в этом проблема
796 1572614
>>72613
Сука какой же я еблан. Забыл выделить память.
797 1572657
Аноны, как вкатиться? Хочу выучить основы и поюзать на практике. Что можно начать делать чтобы постепенно поднять лвл до джуна, например? Стоит ли пилить какой-то проект или лучше задрочить книжки и решать тамошние задачки?
798 1572675
У меня рекурсивная функция поиска пути в дереве. В какой то момент путь найден. Как завершить все рекурсии что бы они не выполнялись?
799 1572679
>>72547
А массив твой типа можно? Используй вектор тогда.
span - это обёртка над указателем, почитай cpp core guidelines
800 1572689
>>72679

> А массив твой типа можно?


Почему нет?

> Используй вектор тогда.


Использую почти всегда, но тут мне кажетсч будет быстрее массив, тк очень много обращений к его элементам

> span - это обёртка над указателем, почитай cpp core guidelines


Прочту
801 1572700
>>72689

>будет быстрее массив, тк очень много обращений к его элементам


А есть разница какая-то с вектором? В обоих случаях ты прибавляешь смещение и обращаешься по указателю.
У тебя там int✲✲ ? Лучшее что можно сделать, это заменить его на int✲, и обращаться как a[y✲dx+x], чтобы было только одно разыменование (и чтобы все данные лежали в одном месте и хорошо умещались в кеш), но это работает только в случае прямоугольных массивов, естественно.
>>72532

>В аргументе я должен указать тот же тип, что и a


Конечно, int✲✲.
802 1572765
>>72689

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


Твоё "кажется" ничего не стоит, пока сам не проверишь. От результатов можно охуеть, даже если написать так, как анон выше (через одномерный массив). Советую посмотреть доклад Александреску, вроде называется "speed is found in minds of people"
803 1572770
>>72679

>span - это обёртка над указателе


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

Максимально не понял это задание. На вас вся надежда
805 1572787
>>72776

>не используя индексацию


Я тоже не понял что это значит. Использовать *(a+i) вместо a, лол? Но это же смешно просто. Я бы написал с индексацией, так бы принёс и потом спросил бы что тут подразумевалось.
sage 806 1572790
>>72787
Вместо a{i} - квадратные скобочки съело.
sage 807 1572803
>>72776
Если это глупое задание от консервативного дядьки, то я бы вот такую дичь нахуевертил бы, пусть подавится: https://ideone.com/PySw0c
808 1572813
>>71296
бамп
809 1572932
>>72803
спащу себе, спасибо анон
это из лабы, там вроде все адекватно, кроме этого задания
810 1572987
Что вы думаете об этом курсе, читать не умею
https://www.udemy.com/course/beginning-c-plus-plus-programming/
811 1573147
Помогите с qt. Надо расположить кнопки вплотную, но layout даже при указании spacing 0 делает видимое расстояние
812 1573150
>>73147
margins
813 1573156
>>73150
Не то
814 1573221
>>73147
Пружинку вставить чтобы сжимала их?
>>72987
Какие то азы судя по оглавлению, можно в любой книжке для начинающих прочесть имхо.
.png352x82
815 1573276
>>73221

> Пружинку вставить чтобы сжимала их?


Бестолку
816 1573359
>>73276
layoutSpacing нулевой?
817 1573360
>>73359
А ну да, ты писал
818 1573545
В статье на хабре (https://habr.com/ru/post/64280/) про виртуальные деструкторы было написано, что если у меня есть виртуальный метод, но деструктор при этом не виртуальный, то происходит утечка памяти.
Можно прояснить вот этот момент?
То есть вот в этом коде(https://ideone.com/4GTp1H) будет утечка памяти? За счёт чего? Какое неявное действие должен был сделать виртуальный деструктор, который его не сделает? Я просто вызываю два пустых конструктора и потом один пустой деструктор для одного и того же адреса.
Я понимаю зачем нужен виртуальный деструктор когда в каком-то из наследников если я дополнительно динамически выделяю память или ещё чем-то подобным, но если я просто переопределяю методы - ничего не произойдёт же?
Screenshot20200115-192246Bromite.jpg325 Кб, 1077x646
819 1573564
>>73156
Кому ты пиздишь
820 1573574
>>73545

> Какое неявное действие должен был сделать виртуальный деструктор, который его не сделает?


Вызвать деструктор наследника вместо деструктора родителя
821 1573578
>>73545
Да даже без динамического выделения памяти.
В родительском классе у тебя одно поле, в дочернем - два.
Без виртуального деструктора при
*parent x = new child;
x.~parent();
будет вызван деструктор родительского класса. Память под сколько полей он освободит?
822 1573607
>>73574
Что поменяется, если он не вызовет деструктор?

>>73578
Ничего не понял по правда говоря. Деструктор не освобождает память, деструктор это лишь дополнительный код, который выполняется перед освобождением памяти, разве не так?
Каких полей? У меня две структуры на 8 байт, где есть только один неявный указатель размером в 8 байт на таблицу виртуальных методов. Если интерпретировать эти 8 байт как указатель - то в нём одинаковое значение даже.

А если перегрузить new и delete, то можно увидеть, что операция выделения и очищения памяти вызывается для одного и того же адреса, неважно указывает ли указатель на A, B или void. Только что в первом случае вызывается 1 деструктор, а в третьем ни одного (и вызывается другой delete, который без указания размера). При этом память была освобождена во всех случаях, даже когда нет возможности вызвать деструктор, потому что тип - void*.
https://ideone.com/jlU7b0
823 1573625
>>73607

> Деструктор не освобождает память, деструктор это лишь дополнительный код, который выполняется перед освобождением памяти


Это ты сам придумал или подсказал кто?
824 1573658
>>73625
Интуиция подтверждаемая выводом программы со второго идеона.
Если бы он освобождал память, то ручной вызов деструкторов приводил бы время от времени к ошибкам, но вроде бы не приводит.
Конструкторы и деструкторы - всего лишь синтаксический сахар же.

https://godbolt.org/z/SPwxg3
Если ты утверждаешь что это не так, то я предлагаю тебе вот тут показать что такого необходимого делает деструктор B, что его нельзя пропускать. Я не увидел ничего подозрительного, например, никаких дополнительных освобождений или выделений памяти.

То есть в памяти есть две таблицы виртуальных методов для A и B, и одного указателя на одну из этих таблиц в экземпляре структуры более чем достаточно для полиморфной работы этих методов. Не вижу в каком месте деструктор или конструктор могут неявно выделять какую-либо ещё память.
825 1573712
>>73578
Че несет. Деструктор у него память освобождает, вообще охуеть.
826 1573773
>>73658
Но если ты не вызовешь деструктор унаследованного класса, то у тебя вытечет его состояние. Вдруг там был какой-нибудь unique_ptr?
827 1573778
>>73773
А, ну ты это и так понял. Вообще, ничего не произойдёт, потому что деструктор не работает с аллокацией/деаллокацией.
828 1573793
Может, так чуть понятнее станет.
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);
829 1573873
>>73712
Деструктор уничтожает объект, так? Что это, если не освобождение памяти?
830 1573887
>>73773
Очевидно, его нет, я только переопределяю код методов. Я же сразу сказал, что мне понятны ситуации когда виртуальный деструктор нужен, но не понятно почему пишут, что он нужен всегда если есть виртуальная функция.

>>73873
Нет, с чего бы? Деструктор всего лишь неявно вызывается в конце области видимости или при вызове delete (и вызывает деструкторы для всех внутренних классов). Используется ли он для уничтожения объекта и освобождения памяти или нет - про это нет никаких гарантий, это всего лишь его предполагаемое использование. Вот (
https://ideone.com/7vMN60) я использую деструктор как метод для печати всех элементов и почему-то объект не слишком уничтожается при вызове деструтора. А вот после delete, после этого он всё-таки перестаёт работать при первом же вызове add(0), потому что удаляет объект именно delete.
831 1573955
>>73873
Очистка ресурсов, в том числе освобождение стековой памяти.
832 1574082
>>73955
Ещё один..
Вот анон выше пояснил же, что деструктор это простой метод но со странным названием, и иногда вызывается автоматически. Всё.
Он делает ровно то, что ты в нём напишешь. Нихуя не напишешь - нихуя не сделает.

Алсо, вызовы деструкторов полей и "освобождение стековой памяти" (лол) происходят только один раз при завершении жизни объекта, и уже после того как его десктруктор выполнился.
833 1574280
>>74082

>деструктор это простой метод но со странным названием


все же у него есть специфика..
виртуальные функции-члены внутри деструкторов не рекомендуется вызывать..
исключения не должны выходить из деструкторов, деструктор всегда должен успешно отработать..
834 1574338
>>74082
Я кажется начинаю понимать. И стек по-моему не освобождается пока ты программу не закроешь.
835 1574366
Как вставить строку в файл между другими строками не считывая и не перезаписывая файл целиком?
836 1574374
>>74366
Никак?
У тебя последовательность байт на диске. Записаны байты с 1 по 9000. Ты хочешь вставить строку между 4000 и 4001 байтом, чтобы она занимала байты с 4000 по 4100. Какое устройство должно быть у диска или файловой системы, чтобы такая операция была допустима?
Первую половину тебе перезаписывать не обязательно, но вот хвост в любом случае придётся. Никаких аппаратно поддерживаемых операций "всовывания" байтов между другими на нынешних дисках пока нету.
837 1574518
Как с помощью стритстрим считать из строки сначала строку до пробела, а потом число после пробела? Делал так, но соснул
std::istringstream df(string);
df >> str;
df >> numb;
838 1574563
>>74280
Из деструктора можно бросать и даже ловить. Если знаешь, что делаешь. А виртуальные функции и из конструктора не очень удобно вызывать, но это в силу особенностей реализации этих самых виртуальных функций.
839 1574577
>>74563

> виртуальные функции и из конструктора не очень удобно вызывать


Что значит "неудобно"? Виртуальный вызов из конструктора ты не осуществишь
840 1574605
>>74518
Не должен был соснуть. Ищи где проебался.
image.png354 Кб, 533x400
841 1574623
Аноны, сап, есть такой вопрос. Как объявить переменную?

Нет, я знаю, что надо написать "int a;", и.. че? Где-то там выделилась память. Я понимаю, что я могу манипулировать с этим участком памяти через "a", но зачем мне это делать, когда я не знаю для чего мне эта переменная нужна? Я собираюсь записывать в эту переменную какие-то биты, ок, но для чего?

Я себе это представляю так, что для начала мне нужно что-то сделать, а потом, когда мне нужно будет использовать память, я ее использую.

Но тогда надо начинать с чего-то другого, верно? Но нельзя начать с чего-то другого, так как чего-то другое требует для манипуляции чего-то того, чего нет (переменной). Такой замкнутый круг. Как решать задачу в итоге?
842 1574649
>>74623
Поешь говна, сделай бочку.
843 1574687
>>74577
Чисто формально, вызов сделать можно. Результат, правда, не совсем тот, что нужен.
844 1574696
>>74623
Если ты переменную объявил, это ещё не значит, что где-то там память выделилась. Твой поток сознания вообще непонятен.
845 1574699
>>74696
Ок, определил
надо же доебаться
846 1574711
>>74696

>Если ты переменную объявил, это ещё не значит, что где-то там память выделилась


Что?
847 1574714
>>74623
Охуеть философ.

> Я себе это представляю так, что для начала мне нужно что-то сделать, а потом, когда мне нужно будет использовать память, я ее использую.


Код обрабатывает данные. Нет переменных - нет данных. Нет данных - нет смысла писать код. "Что-то сделать", впрочем, можно: объявить пустую функцию ничего не принимающую и ничего не возвращающую, а затем её вызывать, сколько хочешь.
f.png28 Кб, 692x200
848 1574779
>>74714

>объявить пустую функцию ничего не принимающую и ничего не возвращающую, а затем её вызывать, сколько хочешь.


Хм, интересное решение. Буду пока придерживаться этого варианта, если что пойдет не так или появится лучший - сообщу
849 1574844
>>74779
Если бы. У тебя там неявный int, так что данные уже есть, хоть и мусор. Перепиши хотя бы с void.
О, ещё кое-что можно:
- пустой оператор ';'
- goto метка;
850 1574892
>>74699
Нет, дело даже не в этом. Если ты написал int a и больше ничего, то память не выделилась. Вообще нихуя не произошло! Это же объявление, блять, оно не генерирует никаких инструкций. Вообще, если ты о такой хуйне задумываешься, осваивай ассемблер. Там сразу станет ясно, кто такой стек, кто такая переменная, функция и прочие не очень понятные вещи.
851 1574953
>>74892
Вот кстати да. Те, кто первым языком учит какой-нибудь питухон, обычно остаются без полного понимания стека.
852 1574982
>>74687
Так вызов будет не виртуальный
853 1575062
>>74082
Хуйню не неси, мальчик. Открой ассемблерный листинг и посмотри что делает деструктор.
854 1575064
Анон, есть ли у тебя ширмавыстрел или ссылка с кодом программы на ассемблере, который на самом деле C или C++ с кучей define?
855 1575128
>>74982
Ну, если это именно так обозвать, то да. Просто смысла нет в такой постановке вопроса.
856 1575145
>>75128
Ну напиши тогда виртуальный вызов из конструктора, интересно посмотреть как ты вызываешь метод объекта, который еще не создан
857 1575214
>>75145
https://gcc.godbolt.org/z/9xx6Hn
Не берусь за чистоту эксперимента, может, там выоптимизировалось чего, но взять и вызвать получилось.

> интересно посмотреть как ты вызываешь метод объекта, который еще не создан


Что значит создан? Память аллоцирована, просто вызывается конструктор, то есть this вполне себе живой указатель. В каком состоянии таблица виртуальных функций мне неизвестно, не знаю, что там в стандарте пишут. GCC, как видно, успевает с ней поработать до входа в тело конструктора.
858 1575258
Ку девсы, пишу сервак на плюсах. Он принимает от клиента сообщения и выполняет соответственный код. Принимаются сообщения в роде "ABC_CMD_0", "ABC_CMD_1" и тп. Как лучше парсить сообщения от клиента? Есть ли паттерны, чтоб решить эту задачу более разумно, а то не охота чекать руками if-ми, лмао.
Thx.
859 1575267
>>75214
Блядь, так это и есть _не_ виртуальный вызов. Вот если бы у тебя конструктор базового класса вызвал метод наследника, тогда бы был виртуальный вызов.
860 1575270
>>75258
Пиши свой ll0 парсер
.png3 Кб, 221x86
861 1575282
Что гуглить, чтобы сделать подобное меню на Qt?
862 1575310
>>75267
Что такое по твоим понятиям вообще "виртуальный вызов"? Это когда умный компилятор угадывает, что ты там захотел вызвать?
863 1575377
Привет, анон. Я студент, учусь на проградриста, второй курс. Мне кажется, я начинающий байтоёб. С этим нужно что-то делать?
864 1575504
>>75310
Позднее связывание?
865 1575522
>>75282
Qt ribbon ui?
866 1575548
Сап, подскажите пожалуйста как создать массив на 210^9 элементов?
пробую так - вылетает, по другому тоже не получается
bool
b = new bool[2000000002];
delete[] b;
867 1575554
>>75548

>2 умножить на 10 в девятой


фикс
868 1575586
>>75504
Заменил неизвестное на непонятное.
869 1575596
>>75548
Памяти-то хватает? У тебя так каждый bool занимает 1 байт. Вроде бы std::vector<bool> ужимает 8 штук в один байт, попробуй.
870 1575599
>>75596
Он же deprecated
871 1575608
>>75599
А когда его это, того? Всё равно, поиграться с ним можно. Можно ещё и свой велосипед сделать, если это всё в учебных целях (очень вероятно).
изображение.png1 Кб, 172x199
872 1575621
>>75548
У меня твой код работает, кушает положенных 2 гб памяти без каких-либо подводных камней.
Вектор действительно ещё в 8 раз ужимает.
873 1575625
>>75621
>>75596
попробую, спасибо
Да, вузовское. Надо у отрезка закрашивать части, но больно границы поставили у него широкие, блин. я решил через false true в массиве закрашивать
874 1575632
>>75625

>закрашивать


Если потом это нужно отрисовывать, то проверка каждого из 2 миллиардов кусков или, упаси боже, отрисовка миллиардов отдельных кусочков - очень плохие идеи.
Храни отсортированые границы частей, по ним в любой момент можно собрать части разных цветов, так что если у тебя получится 30 сегментов, то 30 и нужно будет нарисовать, без цикла на 2 миллиарда.
875 1575639
Нужно написать класс, который бы содержал в себе таблицу рекордов игры. И записывал в файл ясен хуй. Я наговнокодил вот это
https://ideone.com/hcnwKW для каждого уровня сложности должно храниться не более 10 результатов
Можно как то сделать по человечески?
876 1575645
>>75639
Переусложнил и велосипедишь. Используй сериализацию в json, qt умеет искаропки.
877 1575648
>>75632
Понял, спасибо
Не, там надо потом вывести длину закрашенного, думал пройтись где true счетчиком, хотя все равно бы сложности были, даже не учитывая миллиарды значений -_-
878 1575660
>>75310
Ну ты ведь понимаешь, что запись
this->VirtualMethod() в конструкторе базового класса эквивалентна записи this->MyBase::VirtualMethod ().
Анон тебе верно про позднее связывание написал.
879 1575664
>>75648
Имей ввиду, что твоя программа будет в десятки тысяч ресурсозатратнее, чем того необходимо для алгоритма, и что она не заработает, если у тебя границы интервалов указываются как double и там какое-нибудь сложное дробное число будет.
880 1575666
Как сделать передачу звука по интернету? Как проигрывать частично переданный звук? Скорее всего передать просто фаул как звук не сложно. Как воспроизводить во время передачи?
881 1575670
>>75666
std::peredat_zvuk_po_internetu же
882 1575684
>>75666
Ты разберись, что именно тебе нужно передавать. Ноты, волны или обрезанные чести песен в mp3/flac/ogg/etc
По последнему - режь какой-нибудь libmp3/libflac/etc и передавай целые файлики
883 1575710
>>75645
Что то сложно, анон.
884 1575721
>>75710
Не очень. Один раз научишься делать, потом будешь использовать где удобно.
885 1575786
>>75660
Конечно понимаю. Я не понимаю, какой смысл у слов "сделать виртуальный вызов из конструктора". Если это вызов метода, помеченного словом virtual (мы уже поняли, что нет), то всё уже разобрано. Тогда что это? Судя по словам "позднее связывание", я могу лишь догадываться, что это значит "вызвать метод, адрес которого станет известен после отработки всех конструкторов" в конструкторе, что, очевидно, само себе противоречит.
Я говорю, что вызывать виртуальные функции в конструкторе может быть "неудобно", потому что человеку, не очень разбирающемуся в работе виртуальных методов, легко себя наебать -- он может подумать, что вызовется метод, определяемый в самом конце конструирования (как это обычно бывает), а не в процессе. На это анон мне отвечает, что "виртуальный вызов из конструктора сделать нельзя". Какой смысл в этом предложении?
886 1576090
>>75666
Почитай про PCM и как звук вообще воспроизводится и кодируется.
887 1576199
>>75786
Что вы сретесь, вам Страуструп с Саттером в ccg русским английским языком написали что не надо юзать виртуальные методы в конструкторе, используйте фабричные функции.
мимо
888 1576220
>>74623

>для начала мне нужно что-то сделать, а потом, когда мне нужно будет использовать память, я ее использую


Любая программа - трансформация одних данных в другие. Нельзя просто "что-то сделать", тебе нужен direct object. Без данных нет и программы. Да и вообще >>>/ph/
889 1576249
>>76199
Охуеть, дядя сказал, значит, так и буду делать.
890 1576266
>>75599

>Он же deprecated


Пиздёж
891 1576364
Плохой ли тон использовать goto в диалоге ввода?
892 1576376
Еще такой вопрос. Есть несколько классов, стоит ли создать один заголовочный файл и скинуть в него все инклюды, а в классах заинклюдить его?
893 1576381
>>75670
Обосрал свой трон с этого
894 1576392
Почему вот так все работает
vec[x][0]->...
А так нет?
vec[x].begin()->...
895 1576405
Почему без указателя this-> элементы формы работают в обработчике события(Visual studio winforms)? В одной книжке было с this, в другой без, оба примера работают одинаково вроде.
896 1576410
>>76405
Потому что язык позволяет. А в жабке и питоне так нельзя.
897 1576416
>>76410
Нужный объект в метод передается? Как это работает?
898 1576432
>>76416

>Нужный объект в метод передается?


Не очень-то и нужный.
899 1576471
>>76416

>Как это работает?


Как земля.
900 1576476
>>76376
Нет конечно.
901 1576479
>>76392
(*vec[x].begin())->...
Begin возвращает итератор, через стрелку ты получаешь указатель.
Равносильно твоему же

> vec[x][0].SomeMethod()

902 1576482
>>76405
this-> сейчас по сути нужен только в шаблонах
скрин.png138 Кб, 1920x1080
903 1576523
Привет, анон. Подскажи мануал по Eclipse IDE 2019-12. Пытался написать в нем "Привет, мир!" на яве, но он выдаёт ошибки приклейтед (symbol "символнейм" could not be resolved). В онлайн компиляторе всё работает нормально, как заставить эклипс стакаться с явой 13.0.2?
904 1576537
>>76523

> на яве


Что? На яве? У тебя же крестовый код. На яве, если не ошибаюсь, тебе нужно создать класс и в нем сделать метод - и это будет минимальным ява-кодом.
905 1576590
Умоляю подскажите, можно ли как то реализовать через хук что бы нажатие кнопки Z нажимало Z один раз(!) как обычную кнопку и делало что то дополнительно на, например переменную меняло.

В моем случае, когда я на хук Z делаю кейборд эвент Z - оно проспамливает в милисекунду несколько раз. Как мне отделить виртуальное нажатие кейбордэвента от реального физического?
906 1576606
>>76590
https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-keydown
Бит 30: The previous key state
На него завязаться как-нибудь?
907 1576722
>>76523
Хуже эклипса только виндовый блокнот. Используй Вижуал студию
911 1578962
>>54355

>Однако "оптимизацией" подобные выкидывания, переписывания и упрощения - не являются.


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

мимонуб, читавший листавший этот ваш рефакторинг и прочие чистые коды
912 1578966
>>54724
Упоминание эффекта Даннинга-Крюгера выявляет находящихся под ним ещё надёжнее.
А всё потому, что впоследствии оказалось, что сами учёные подошли к исследованиям спустя рукава и впоследствии их исследование было пересмотрено и подвергнуто критике.
Тред утонул или удален.
Это копия, сохраненная 18 февраля 2020 года.

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

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