首页 > 解决方案 > 在 Boost::Hana 中使用 BOOST_HANA_DEFINE_STRUCT 定义具有 40 多个字段的结构

问题描述

例如,使用库 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 的源代码,可以发现在 file 中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 tuple 实现的这种结构但具有太多字段是一种好习惯吗?如果它不是一个好的设计,推荐什么替代方案?

非常感谢!

标签: c++boostmetaprogrammingboost-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

推荐阅读