ich mit variadische Vorlagen bin experimentieren und würde gerne wissen, ob sie in verwendet werden können, um generalze (?) Klasse Vorlagen wieinitialzing und den Zugriff auf Mitglieder einer variadische Klassenvorlage
template<typename T1, typename T2 , typename T4, typename T4>
struct Foo
{
T1 &m_member1;
T2 &m_member2;
T3 &m_member3;
T4 &m_member4;
};
Auch ich Ich möchte in der Lage sein, alle Mitglieder durch Verketten von Konstruktoren zu initialisieren. Dies ist, wie weit ich bekommen habe:
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;
};
, wo das Ziel ist es, Objekte zu erstellen, wie so:
Foo<char,int,bool,float> f('a' , 42 , true , 1.234);
Der Code fehlschlägt (gcc 4.5.3) mit dem Fehler zu kompilieren:
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
bearbeiten
Was wäre der beste Weg, um wieder die verschiedenen Mitglieder von Foo
?
Suchen Sie 'std :: tuple'? – pmr
@pmr Danke. std :: tuple macht einen wunderbaren Job. C++ x11 ist erstaunlich !!! – Olumide