Ste*_*art 5 c++ arrays reflection boost
BOOST_HANA_DEFINE_STRUCT用内省声明结构时是一个很棒的宏。如果我有这样的结构:
struct Person {
std::string name;
std::string last_name;
int age;
};
Run Code Online (Sandbox Code Playgroud)
我们可以通过像这样重新定义它来添加自省:
struct Person {
BOOST_HANA_DEFINE_STRUCT(Person,
(std::string, name),
(std::string, last_name),
(int, age)
);
};
Run Code Online (Sandbox Code Playgroud)
但是如果我们有这样的结构怎么办:
struct Person {
float eye_dioptre[2];
};
Run Code Online (Sandbox Code Playgroud)
我将如何使用BOOST_HANA_DEFINE_STRUCT语法来反映 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__ );
);
};
Run Code Online (Sandbox Code Playgroud)
上面的两个选项都会导致编译器错误。我期待的答案是“你应该使用 c++ 风格的数组”。可以这样做:
struct Person {
BOOST_HANA_DEFINE_STRUCT(Person,
(std::array<float,2>, eye_dioptre)
);
Run Code Online (Sandbox Code Playgroud)
但是有没有办法用 C 风格的数组来做到这一点?};
我能想到的唯一方法是仅使用我认为您不想要的指针,或者使用模板别名,这将类似于:
template<size_t N>
using floatArr = float[N];
Run Code Online (Sandbox Code Playgroud)
在定义时struct:
struct Test {
BOOST_HANA_DEFINE_STRUCT(Test,
(floatArr<2>, example)
);
};
Run Code Online (Sandbox Code Playgroud)
说明此工作的示例程序:[GCC]
事实上,您甚至可以将这个别名概括为任何类型:
template<typename T, size_t N>
using CArray = T[N];
Run Code Online (Sandbox Code Playgroud)
现在,任何类型的 C 样式数组都可以使用BOOST_HANA_DEFINE_STRUCT诸如CArray<float, 2> example.
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |