[英]Reflecting C-style arrays with Boost Hana
在使用內省聲明結構時, BOOST_HANA_DEFINE_STRUCT
是一個很棒的宏。 如果我有這樣的結構:
struct Person {
std::string name;
std::string last_name;
int age;
};
我們可以通過重新定義它來添加內省:
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
語法來反映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<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];
現在,可以使用諸如CArray<float, 2> example
類的語法將任何類型的C樣式數組與BOOST_HANA_DEFINE_STRUCT
使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.