gpt4 book ai didi

c++ - 使用 Boost Hana 反射(reflect) C 风格数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:25 24 4
gpt4 key购买 nike

BOOST_HANA_DEFINE_STRUCT 是声明具有内省(introspection)的结构时的绝佳宏。如果我有这样的结构:

struct Person {
std::string name;
std::string last_name;
int age;
};

我们可以像这样重新定义它来添加内省(introspection):

struct Person {
BOOST_HANA_DEFINE_STRUCT(Person,
(std::string, name),
(std::string, last_name),
(int, age)
);
};

但是如果我们有这样的结构呢:

struct Person {
float eye_dioptre[2];
};

我如何使用 BOOST_HANA_DEFINE_STRUCT 语法来反射(reflect) C 风格的数组?我试过:

struct Person {
BOOST_HANA_DEFINE_STRUCT(Person,
(float[2], eye_dioptre), // error: expected unqualified-id before ‘[’ token
(float, eye_dioptre[2]) // error: template argument 2 is invalid BOOST_HANA_DEFINE_STRUCT(structure_name, __VA_ARGS__ );
);
};

以上两个选项都会产生编译器错误。我期待的答案是“你应该使用 C++ 风格的数组”。可以这样做:

struct Person {
BOOST_HANA_DEFINE_STRUCT(Person,
(std::array<float,2>, eye_dioptre)
);

但是有没有办法用 C 风格的数组来做到这一点? };

最佳答案

我能想到的唯一方法是使用一个指针,我认为您不需要,或者使用 template alias ,类似于:

template<size_t N>
using floatArr = float[N];

并且在定义 struct 时:

struct Test {
BOOST_HANA_DEFINE_STRUCT(Test,
(floatArr<2>, example)
);
};

说明此工作原理的示例程序:[GCC]

事实上,您甚至可以将此别名概括为任何类型:

template<typename T, size_t N>
using CArray = T[N];

现在任何类型的 C 样式数组都可以与 BOOST_HANA_DEFINE_STRUCT 一起使用使用类似 CArray<float, 2> example 的语法.

关于c++ - 使用 Boost Hana 反射(reflect) C 风格数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48622549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com