Определение структуры с более чем 40 полями с помощью макроса BOOST_HANA_DEFINE_STRUCT в библиотеке Boost::hana, например,
#include <boost/hana/define_struct.hpp>
namespace hana = boost::hana;
// a simple struct having 41 fields
struct Foo {
BOOST_HANA_DEFINE_STRUCT(Foo,
(int, bar_0),
(int, bar_1),
...,
(int, bar_40)
);
};
вызовет ошибку компиляции
pasting "BOOST_HANA_DEFINE_STRUCT_IMPL_" and "(" does not give a valid preprocessing token.
Глубоко изучив исходный код Hana, можно обнаружить, что в файле boost/hana/detail/struct_macros.hpp
все макросы определены жестко запрограммированными реализациями из шаблона,
...
#define BOOST_HANA_DEFINE_STRUCT_IMPL_40(TYPE , m1, m2, ..., m39) \
#define BOOST_HANA_DEFINE_STRUCT_IMPL_41(TYPE , m1, m2, m3, ..., m40) \
Итак, мой вопрос
Как я могу определить новое максимальное число аргументов, например 128, и перегенерировать макросы, чтобы можно было передать больше аргументов?
Является ли хорошей практикой использование такой структуры, реализованной кортежем Hana, но имеющей слишком много полей? Если это не очень хороший дизайн, какая альтернатива рекомендуется?
Большое спасибо!