inq_1337, купить систему защиты, виртуализирующую код. Взламывается от почти сразу. Прост опо наличию пиратских версий программ можно понять, что 100% защшиты нет и, кому нужно, тот взломает.
none7, Вот только тут не функции, а методы класса, да ещё и с наследованием. Тут просто указатель не получится получить, так что вся задумка ТС изначально ошибочна.
rPman, если бы была проблема в json, то и все другие числа были бы неправильны. И не только у одного пользователя. Сервер это windows приложение, смотреть нечего.
PageUp, ну они находятся в разрешённой стране и их по IP не банят. но при подтверждени по паспорту и физическому адресу всё-арвн овед выяснят, где ты находишься. Да и банально 25 долларов сейчас проблематично заплатить
Ternick, вот такой прототип у фукнции: ostream& write (const char* s, streamsize n);
причём s это не строка, а любой массив байт, длиной n. Просто приводишь тип указателя на структуру к указателю на строку и записываешь. Так же делаешь при чтении.
Но делать так возможно только для POD структур, т.е. чтобы небыло никаких выделений памяти, указателей и подобного.
ubf.write( (const char*)&fstr, sizeof(fstr) );
Но так можно делать только для POD типов и лучше "дамп памяти" не сохранять. В конкретно этом случае проблемы будут только если изменится выравнивание полей структуры и байты сдвинутся, тогда может оказаться, что сохранено одно число байт, а структура уже занимает больше байт.
toster_bodnar, ну тут скорее вопрос, почему Container не шаблонный класс? Из контейнера надо получать Base и из Base уже получать USED_TYPE. А Base получать или по индексу, еслитам есть индексируемый список типов, либо прям полностью указывать тип.
Александр Ананьев, Да это понятно, но там нужно делать релизацию на WinAPI с сообщениями очереди сообщений Windows. Это выглядит костылями. Я был уверен, что Qt даёт это сделать своими средствами, без платформенно-зависимых костылей.
toster_bodnar, Добавлять указатель на объект, вместо объекта. "M* m" вместо "M m". Можно создавать указатели на неопределённый тип. При этом определение и реализация классов должна быть в разных файлах.
impelix, чтобы добавить в очередь пару чисел, это должна быть очередь пар.
std::queue<int> q1; // сюда пару вставить нельзя
std::queue< std::pair<int,int> > q2; // сюда можно только пару вставить
q1.empace( 1 );
q2.emplace( 2, 3 );
MuffinLover, while(rawWavFile) и while( !rawWavFile.fail() ) - одно и то же и было правильно. Правильнее, чем rawWavFile.eof(). значит seekg в конце цикла передвигал не в eof положение и следующая итерация запускалась, но считать уже ничего не получалось и chunk оставался старый, а на следующей итерации уже fail срабатывал.
MuffinLover, ну после eof не стоит ничего читать из файла. А после двух eof - тем более!
Не знаю, UB или не UB, скорее всего, чтение файла после eof не происходит и в chunk остаётся "мусор" с прошлого раза. Я бы ожидал, что исключеие кинет, но, не кидает, как видим.
В начале цикла while проверяй, что не eof. Вообще перед каждым чтением проdеряй, что не eof.