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

标签 c++ boost metaprogramming 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 tuple实现但结构太多的结构是否是一种好习惯?如果设计不好,建议使用什么替代方法?

  • 非常感谢!

    最佳答案

    有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
    

    关于c++ - 在Boost::Hana中使用BOOST_HANA_DEFINE_STRUCT定义具有40个以上字段的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59405856/

    相关文章:

    c++ - 控制台未返回 cin 缓冲区中预期的字符数

    c++ - skipper 在 boost::spirit 中不起作用

    c++ - 为什么不使用 boost::tuple 的 .get 在 gcc 的模板函数中工作?

    Ruby:如何在程序中生成代码行?

    ruby - 我怎样才能 "replace"通过 ruby​​ include 函数包含的模块

    c++ - 为 freebsd 11 : error: unknown type name 'choke' 编译 gcc4.8.5 时出错

    c++ - QDockWidget - 删除句柄

    c++ - 是否有可能杀死纺 yarn ?

    C++ boost::bind 说不可访问的基类

    ruby - 猴子修补 vs class_eval?