Название: QList доступ к элементам Отправлено: deMax от Июль 13, 2015, 09:26 Есть структуры A1, A2, A3... . Есть список QList<Ax> list (x - любая цифра).
У меня есть void *v = &list; Как мне получить адреса элементов в списке? &list[0], &list[1]... p.s. Без использования указателя - QList<*Ax> Как во втором qDebug получить такие же значения? Код:
Название: Re: QList доступ к элементам Отправлено: deMax от Июль 13, 2015, 10:51 Гарантирует ли QVector то что &list = &list[0]+i*itemSize ?
p.s. для чего делаю: Код: struct A: public Ini { Название: Re: QList доступ к элементам Отправлено: Igors от Июль 13, 2015, 12:10 Гарантирует ли QVector то что &list = &list[0]+i*itemSize ? Без itemSize, адресная арифметика сама помножит. Гарантируется что Код НО только до тех пор пока vector не будет изменен. Код:
Название: Re: QList доступ к элементам Отправлено: deMax от Июль 13, 2015, 12:37 Зачем лепить такого урода если есть штатное средство QVariant ? QVariant к произвольной структуре?НО только до тех пор пока vector не будет изменен. Это чтение структуры, ес-но она не изменит вектор.работает чтение, Base* vi = (Base*)((int)&(*vec)[0] + j*size); Сейчас думаю как запись сделать? Как QVector<char[size]> создать? Название: Re: QList доступ к элементам Отправлено: Авварон от Июль 13, 2015, 12:40 QVariant к произвольной структуре? Да.Название: Re: QList доступ к элементам Отправлено: deMax от Июль 13, 2015, 12:58 QVariant прикольная вещь, но хотелось видеть QVector<A> alist, а не QVector<QVariant> alist;
тем более вместо QVarian указатель будет удобнее. Можно ли как то создать QVector<char[size]> что бы тип был нужной тебе длины? resize правильно не выполниться без этого. Или можно ли вызвать вектору resize(itemCount*size), а потом заменить переменную size? Название: Re: QList доступ к элементам Отправлено: deMax от Июль 13, 2015, 14:53 Походу свой вектор писать придется >:(
Может можно переопределить класс QVector, чтобы он создал в памяти массив и доступ к элементам массива. Не его дело что там за тип будет >:( Название: Re: QList доступ к элементам Отправлено: Igors от Июль 13, 2015, 15:31 Возможно (ну это я только догадываюсь) есть набор "параметров" - значений разного типа. И вот возникла мысль хранить их адреса (или значения ?) в одном контейнере чтобы по нему пробегаться напр для загрузки/выгрузки в текстовый файл. И понеслась - адрес (указатель) надо как-то "идентифицировать", а подлые значения еще и в один контейнер не ложатся.
Так дело было? Если нет то поясните как - а то, как всегда, трудно понять о чем Вы :) Название: Re: QList доступ к элементам Отправлено: deMax от Июль 13, 2015, 15:43 Смысл такой, нужна сериализация, но чтобы он был читабельным(т.е. для каждой переменной прописывается ее значение).
просто сериализация делается через потоки, как то так: Код: template <typename T> Я хочу сделать как то так: (точнее уже сделано, только не могу вектору на неизвестную структуру resize сделать) Код: struct Ini: public Base Получаем такой текстовый файл: Код: configFile=conf Конечно можно сделать как то так: Код: switch(typeSize) Название: Re: QList доступ к элементам Отправлено: Igors от Июль 14, 2015, 11:26 Код: add(STRNG, &st.s, "st.s"); 1) Если речь об ini файле - оно того не стоит. Написать "в лоб", без затей намного проще, см QSettings 2) Откуда взялась необходимость хранения данных разного типа? Вы упорно подаете указатель, ну и храните его как void * и при операциях приводите к нужному типу. Т.е. сами переменные у Вас есть и существуют всегда, они и хранят, чего еще надо? Название: Re: QList доступ к элементам Отправлено: deMax от Июль 24, 2015, 15:50 1) Если речь об ini файле - оно того не стоит. Написать "в лоб", без затей намного проще, см QSettings 1) когда класс один - проще, когда их много то лучше сделать механизм: я хочу сохранять не только настройки, но еще и состояние виджетов/классов (хотя для них возможно сделаю бинарную сериализацию).2) Откуда взялась необходимость хранения данных разного типа? Вы упорно подаете указатель, ну и храните его как void * и при операциях приводите к нужному типу. Т.е. сами переменные у Вас есть и существуют всегда, они и хранят, чего еще надо? 2) каким образом я пройдусь по переменным произвольной структуры, еще и тип узнаю каждого элемента? Для каждой структуры писать load+save не интересно, лучше перечислить их в конструкторе. p.s. вектор нельзя никак обмануть? чтобы при методе resize() sizeof(T) выдавал size который я ему укажу? Или сделать resize для byte, и заменить в заголовке вектора переменную size(адрес вектора+2*4байта что ли) Название: Re: QList доступ к элементам Отправлено: Igors от Июль 24, 2015, 16:18 2) каким образом я пройдусь по переменным произвольной структуры, еще и тип узнаю каждого элемента? QVariantList, хотя это без толку, все равно будете опять спрашивать свое :)Для каждой структуры писать load+save не интересно, лучше перечислить их в конструкторе. Интересно или нет - а придется, вопрос лишь когда Вы для этого созреете :)p.s. вектор нельзя никак обмануть? чтобы при методе resize() sizeof(T) выдавал size который я ему укажу? Или сделать resize для byte, и заменить в заголовке вектора переменную size(адрес вектора+2*4байта что ли) Пример: есть "сложные" полигоны которые могут ссылаться на 5 и более индексов/вертексов. Др словами каждый полигон переменной длины. Я храню их в 2 векторахКод Но все это только для POD типов, для чего-то "выше травы" (напр хранимая структура имеет указатели и/или виртуалы) это работать не будет Название: Re: QList доступ к элементам Отправлено: deMax от Июль 27, 2015, 11:35 QVariantList, хотя это без толку, все равно будете опять спрашивать свое :) т.е. вместо struct Monstr{int heals, int attack}; писать QMap<QString, QVariant> monstr; monstr["heals"] = 10; Цитировать Но все это только для POD типов, для чего-то "выше травы" (напр хранимая структура имеет указатели и/или виртуалы) это работать не будет На указатели и прочее тоже можно способы найти.Название: Re: QList доступ к элементам Отправлено: Igors от Июль 27, 2015, 12:06 т.е. вместо struct Monstr{int heals, int attack}; писать Нет, самого Monstr запихнуть в QVariant. там несложно и все для этого естьQMap<QString, QVariant> monstr; monstr["heals"] = 10; На указатели и прочее тоже можно способы найти. Может и можно, но уже не один месяц ищете и, скорее всего, так ничем и кончится Название: Re: QList доступ к элементам Отправлено: deMax от Июль 30, 2015, 14:59 Нет, самого Monstr запихнуть в QVariant. там несложно и все для этого есть Может и можно, но уже не один месяц ищете и, скорее всего, так ничем и кончится [/quote]Можно и так, я уже сделал по другому. Хочется победить эту штуку.Написал свой вектор, пришлось даже от оператора new отказаться(тоже тип ему подавай). p.s. не хватает в c++ переменной типа, чтобы в функцию тип можно было передать. В шаблоне switch(type) самое то было бы... |