簡體   English   中英

使用Boost Hana反映C風格的數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM