我与可变参数模板实验和想知道他们是否能按顺序使用generalze的访问成员(?)类模板,如Initialzing和可变参数类模板
template<typename T1, typename T2 , typename T4, typename T4>
struct Foo
{
T1 &m_member1;
T2 &m_member2;
T3 &m_member3;
T4 &m_member4;
};
另外,我我希望能够通过链接构造函数初始化所有成员。这是多远,我已经得到了:
template<typename... Types>
struct Foo;
template<typename T , typename... Types>
struct Foo<T, Types ...> : public Foo<Types ...>
{
Foo(T member , Types ... others) : m_member(member) , Foo<Types ...>(others)
{
}
T m_member;
};
template<typename T>
struct Foo<T>
{
Foo(T member) : m_member(member)
{
}
T m_member;
};
其目标是创建出象这样的对象:
Foo<char,int,bool,float> f('a' , 42 , true , 1.234);
的代码无法编译器(gcc 4.5.3)出现错误:
TestVariadicTemplates.cpp: In constructor ‘Foo<T, Types ...>::Foo(T, Types ...)’:
TestVariadicTemplates.cpp:15:83: error: parameter packs not expanded with ‘...’:
TestVariadicTemplates.cpp:15:83: note: ‘others’
TestVariadicTemplates.cpp:15: confused by earlier errors, bailing out
编辑
什么是重的最佳方式请问Foo
的各个成员?
您是否在寻找'的std :: tuple'? – pmr
@pmr谢谢。 std :: tuple做了一件了不起的工作。 C++ x11非常棒! – Olumide