Если ваши структуры являются POD, вы можете использовать std :: tuple вместо structs. Затем вы можете использовать различные шаблоны для работы через членов кортежа.
Вот простой пример, который печатает элементы кортежа - с помощью наддува :: фьюжн :: кортеж вместо станда :: кортеж, поскольку он имеет гораздо больше кортежей манипулирования имеющихся возможностей:
#include <boost/fusion/tuple.hpp>
#include <boost/fusion/include/for_each.hpp>
#include <iostream>
struct Printer {
template<typename T>
void operator()(const T &t) const {
std::cout << t << std::endl;
}
};
int main(int argc, const char * argv[])
{
boost::fusion::tuple<int, int, int, int, float> t =
boost::fusion::make_tuple(3, 5, 1, 9, 7.6f);
boost::fusion::for_each(t, Printer());
return 0;
}
Вы можете включить их в союзы со структурой, но вы хотите провести некоторое тестирование для обеспечения правильного согласования.
Поверхность заключается в том, что эти манипуляции очень быстрые - большая часть работы выполняется во время компиляции. Нижняя сторона заключается в том, что вы не можете использовать обычные структуры управления, такие как индексирование, с индексами времени исполнения - вам нужно будет создать слой абстракции вокруг этого, поскольку обычный аксессуар get<i>(tuple)
требует, чтобы i
была константой времени компиляции. Независимо от того, стоит ли это, сложность сильно зависит от приложения.
Почему бы не провести массив в структуре? – juanchopanza
'int Bar [2]' - no. 'int Bar [3]' - да. –
@juanchopanza Фактическая реализация содержит внушительное количество членов, определяющих свойства элемента, которые должны быть записаны в файл. Я боюсь создать беспорядок для нечитаемых данных для моих глаз. Но я также хочу иметь возможность добавлять «специальные» свойства. –