Jestem eksperymentowanie z szablonów o zmiennej liczbie argumentów i chcieliby wiedzieć, czy mogą one być wykorzystywane w celu generalze (?) Szablonów klas takich jakInitialzing i członkach korzystające o zmiennej liczbie argumentów klasy szablonu
template<typename T1, typename T2 , typename T4, typename T4>
struct Foo
{
T1 &m_member1;
T2 &m_member2;
T3 &m_member3;
T4 &m_member4;
};
Również, chciałby zainicjować wszystkich członków poprzez łańcuchy konstruktorów. Jest to, jak daleko stałam:
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;
};
gdzie celem jest stworzenie obiektów tak:
Foo<char,int,bool,float> f('a' , 42 , true , 1.234);
kod nie skompilować (gcc 4.5.3) z błędem:
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
Edit
Jaki byłby najlepszy sposób, aby ponownie różnych członków Foo
?
Szukasz 'std :: tuple'? – pmr
@pmr Dzięki. std :: tuple wykonuje cudowną pracę. C++ x11 jest niesamowity !!! – Olumide