Инициализация и доступ к членам шаблона класса variadic

Я экспериментирую с шаблонами variadic и хотел бы знать, могут ли они использоваться для обобщения (?) Шаблонов классов, таких как

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?

5

Решение

Вы должны сделать то, что он говорит: Расширить переменные, которые приходят из пакетов параметров (переменных параметров) с помощью ...,

То есть вместо

Foo<Types ...>( others )

записывать

Foo<Types ...>( others... )
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]