Манипулировать структурными данными по вертикалиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Манипулировать структурными данными по вертикали

Сообщение Anonymous »

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

Код: Выделить всё

struct SomeStruct { QString first; QString second; QString third; ... };
void manipulateData(const QList& list, const SomeStruct& a, const SomeStruct& b, const SomeStruct& c)
{

}
Что я мог бы сделать, это просто иметь шаблонный код в форме:

Код: Выделить всё

list[0]->setValue(a.first);
list[0]->setData(b.first + c.first);
list[1]->setValue(a.second);
list[1]->setData(b.second + c.second);
... (maybe more for each)
Но я пытаюсь сделать это немного лучше, поэтому моя первоначальная идея — создать список структур с удобной для использования формой:

Код: Выделить всё

void manipulateData(const QList& list, const SomeStruct& a, const SomeStruct& b, const SomeStruct& c)
{
struct TempStruct { SomeObject* obj; QString a; QString b; QString c; };
QList tempList = {
{list[0], a.first, b.first, c.first},
{list[1], a.second, b.second, c.second},
...
}
for(const auto& item: tempList)
{
item.obj->setValue(item.a);
item.obj->setData(item.b + item.c);
}
}
Таким образом, будет проще добавить новую строку в мой список структур.
Проблема, с которой я все еще сталкиваюсь, заключается в том, что она все еще не ощущается как лучшая идея, так как мне приходится повторять слова «а.первый, б.первый, в.первый». Достаточно было бы заполнить его каким-то «способом» получения «первого», «второго», «третьего» в структуре «SomeStruct». Итак, в конечном итоге мне бы хотелось, чтобы моя структура выглядела (и была заполнена) примерно так:

Код: Выделить всё

void manipulateData(const QList& list, const SomeStruct& a, const SomeStruct& b, const SomeStruct& c)
{
struct TempStruct { SomeObject* obj; int getter}; //not sure about the type of getter
QList tempList = {
{list[0], &a.first - &a}, //diff in memory place?
{list[1], &a.second - &a},
...
}
for(const auto& item: tempList)
{
item.obj->setValue(*(&a+item.getter));
item.obj->setData(*(&b+item.getter) + *(&c+item.getter));
}
}
Я не уверен насчет типов в моем последнем примере (считайте его псевдокодом) — у меня два вопроса:
  • Можно ли с уверенностью предположить, что &c + &(b.секунда)-&b=&(c.секунда) ?
    Есть ли лучшее решение, может быть, более понятное?
Я включил некоторые пояснения по вопросу 1 (правильно ли я понимаю?)
Изображение


Подробнее здесь: https://stackoverflow.com/questions/792 ... vertically
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Манипулировать структурными данными по вертикали
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Манипулировать структурными данными по вертикали
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Когда типы замыканий наконец стали структурными типами?
    Anonymous » » в форуме C++
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как я могу манипулировать данными, поступающими из файла CSV в Java?
    Гость » » в форуме JAVA
    0 Ответы
    89 Просмотры
    Последнее сообщение Гость
  • Как я могу манипулировать данными, поступающими из файла CSV в Java?
    Гость » » в форуме JAVA
    0 Ответы
    85 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»