例如,使用库中的宏BOOST_HANA_DEFINE_STRUCT定义具有 40 多个字段的结构 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 元组实现但字段过多的这种结构是一种好的做法吗?如果这不是一个好的设计,推荐什么替代方案?
非常感谢!
有 boost/hana/detail/struct_macros.hpp.erb,它可以用来重新生成 boost/hana/detail/struct_macros.hpp
MAX_NUMBER_OF_MEMBERS=55 erb struct_macros.hpp.erb > struct_macros.hpp