c++ - 在 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) \
所以我的问题是
如何定义一个新的最大参数数,例如 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
推荐阅读
- tensorflow - 在一个 GPU 中并行运行两个作业
- python - 如何使用可选参数python3创建一个函数
- python-3.x - Pygame 全屏窗口控制
- r - 与 x 轴 (R) 中的时间序列一致
- python - Django CustomUserModel 电子邮件字段区分大小写
- arrays - 无法将类型“[String]”的值分配给类型“String?” 错误斯威夫特
- node.js - 如何读取并保存列表中的所有 cloudant 文档
- database - 连接两个表以获取确切日期
- c# - EntityFramework Core 2.1 linq 查询在 where 子句中使用 DateTime.Add() 未翻译成 SQL
- json - JDT变换修改第N个数组元素