2017-02-03 70 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

够好!谢谢! –

相关问题