假设我有一个模板化的类,应该像这样调用:
struct mystruct { int member1; long member2; string member3; };现在我想创建一个boost::mpl::vector ,它将有效地包含struct中所有成员的类型(最好以相同的顺序):
using membervector1 = boost::mpl::vector<int, long, string>;当然我想要根据我的结构模板化语法,如下所示:
using membervector2 = some_smart_template<mystruct>; static_assert(std::is_same<membervector1, membervector2>::value);Suppose I have a templated class that is supposed to be called like this:
struct mystruct { int member1; long member2; string member3; };Now I want to create a boost::mpl::vector that will effectively contain types of all the members in the struct (preferably in the same order):
using membervector1 = boost::mpl::vector<int, long, string>;Of course I want the syntax to templated with respect to my struct, like this:
using membervector2 = some_smart_template<mystruct>; static_assert(std::is_same<membervector1, membervector2>::value);最满意答案
C ++静态reflaction可以在C ++ 14中实现。
Magic几乎可以做你想要的,除了它是元组,而不是mpl :: vector,但我认为从元组中获取mpl :: vector不是一个大问题。
请参阅演示幻灯片并进行解释 。
C++ static reflaction can be implemented in C++14 aready.
Magic get almost does what you want, except that it's tuple, not mpl::vector, but I think it is not a big issue to get mpl::vector from tuple.
See presentation slides with explaination.
更多推荐
发布评论