使用 BOOST_HANA_DEFINE_STRUCT in Boost::Hana 定义具有超过 40 个字段的结构

Define struct having more than 40 fields using BOOST_HANA_DEFINE_STRUCT in Boost::Hana

使用库 Boost::hana 中的宏 BOOST_HANA_DEFINE_STRUCT 定义具有超过 40 个字段的结构,例如,

#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) \

所以我的问题是

  1. 如何定义一个新的最大参数个数,比如128,并重新生成宏,让更多的参数可以通过?

  2. 使用这样一个由 Hana 元组实现但字段太多的结构是一个好习惯吗?如果不是一个好的设计,推荐什么替代方案?

非常感谢!

有 boost/hana/detail/struct_macros.hpp.erb 可用于重新生成 boost/hana/detail/struct_macros.hpp using

MAX_NUMBER_OF_MEMBERS=55 erb struct_macros.hpp.erb > struct_macros.hpp