Russian Qt Forum
Сентябрь 21, 2017, 08:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создать вектор по размеру  (Прочитано 149 раз)
deMax
Бывалый
*****
Offline Offline

Сообщений: 462



Просмотр профиля
« : Сентябрь 13, 2017, 09:07 »

Корректно ли данное безумие или есть лучше варианты? Есть сериализация из ini файла, нужно сделать для intptr_t p = &QVector<ZZ> zz; p->resize() зная только размер ZZ.

Код:
struct ZZ{    int a,b,c;};

template <int sizeType> void setSizeVector(intptr_t vec, int size) {
    QVector<std::array<char,sizeType>> *z2 = (QVector<std::array<char,sizeType>>*)vec;
    z2->resize(size);
}

int main(int argc, char *argv[])
{
    QVector<ZZ> z1;
    intptr_t p = (intptr_t)&z1;
    const int size_t = sizeof(ZZ);
    setSizeVector<size_t>(p, 11);
    qDebug()<<z1.size();
    return 0;
}
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 9797


Просмотр профиля
« Ответ #1 : Сентябрь 13, 2017, 12:20 »

Есть сериализация из ini файла, нужно сделать для intptr_t p = &QVector<ZZ> zz; p->resize() зная только размер ZZ.
Поверьте - не нужно. Чем быстрее Вы перестанете мудрить и  спокойно, без всяких затей, распишете сериализацию/десериализацию для каждой структуры - тем лучше. Возня с такими автоматами/пулеметами себе дороже.

Записан
deMax
Бывалый
*****
Offline Offline

Сообщений: 462



Просмотр профиля
« Ответ #2 : Сентябрь 13, 2017, 12:55 »

Поверьте - не нужно. Чем быстрее Вы перестанете мудрить и  спокойно, без всяких затей, распишете сериализацию/десериализацию для каждой структуры - тем лучше. Возня с такими автоматами/пулеметами себе дороже.
В файл сохранить ручками может и не слишком сложно. Хотя мой классик умеет структуры любой вложенности сохранять достаточно просто(еще бы TODO победить, в принципе уже понял как сделать, но пока нет времени и слишком мудрено получиться):

Код:
struct S1: public Serialize {
    int a,b,c;
    S1() { ADDVALUE(a); ADDVALUE(b); ADDVALUE(c); }};

struct S2: public Serialize {
    QVector<S1> ss;
    S2() { ADDVECTOR(S1, ss); }
    void resizeVectorsOnLoad(IniFormat *ini) {
        ss.resize(ini->sizeVectGroup("ss")); }}; // todo remove

main() {
    S2 in, out;
    in.ss.resize(2);
// заполняем in
    in.save("test2.cfg");
    out.load("test2.cfg");
// in == out

Тут еще преимущество в том что при наличие данных о структуре, я связываю форму со структурой (на каждый тип по строчке, как правило тип один bool) называю похоже переменные и поля в форме и они "сами" связываются Улыбающийся
« Последнее редактирование: Сентябрь 13, 2017, 12:58 от deMax » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.048 секунд. Запросов: 22.