使用 Boost::Hana 中的 BOOST_HANA_DEFINE_STRUCT 定义具有 40 个以上字段的结构



例如,使用库中的宏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) 

所以我的问题是

  1. 如何定义新的最大参数数(例如 128(并重新生成宏,以便能够传递更多参数?

  2. 使用由 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

最新更新