使用 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) \
所以我的问题是
如何定义一个新的最大参数个数,比如128,并重新生成宏,让更多的参数可以通过?
使用这样一个由 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
使用库 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) \
所以我的问题是
如何定义一个新的最大参数个数,比如128,并重新生成宏,让更多的参数可以通过?
使用这样一个由 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