2017-02-03 71 views
0

假設我有一個應該被稱爲像這樣的模板類:C++:如何創建一個從結構成員一個可變參數序列

struct mystruct 
{ 
    int member1; 
    long member2; 
    string member3; 
}; 

現在我想創建一個boost::mpl::vector,這將有效地遏制類型所有在結構中的成員(優選以相同的順序):

using membervector1 = boost::mpl::vector<int, long, string>; 

當然我想的語法相對於模板到我的結構,如下所示:

using membervector2 = some_smart_template<mystruct>; 
static_assert(std::is_same<membervector1, membervector2>::value); 
+2

在我們獲得靜態反射之前,您必須使用類似[BOOST_FUSION_ADAPT_STRUCT](http://www.boost.org/doc/libs/1_62_0/libs/fusion/doc/html/fusion/adapted/adapt_struct的.html)。 – Quentin

+0

@Quentin感謝您的建議。不幸的是'BOOST_FUSION_ADAPT_STRUCT'需要重複所有的結構成員。我想避免這種情況。 –

回答

1

C++靜態反射可以在C++ 14中實現。

Magic get幾乎做你想要的,除了它是元組,不是mpl :: vector,但我認爲從元組獲得mpl :: vector不是一個大問題。

參見presentation slides with explaination

+0

夠好!謝謝! –

相關問題