Я пытаюсь использовать вариативные шаблоны для состава классов. Идея состоит в том, что класс Composer
просто агрегирует несколько переменных и перенаправляет вызовы функций всем инстанцированным переменным.
Во-первых, я использую следующий простой класс-оболочку:
template< typename T >
struct WrapperType
{
typedef T wrapped_type;
typedef typename wrapped_type::value_type value_type;
wrapped_type wrapee_;
WrapperType() : wrapee_{}
{}
};
Это используется со следующим классом Composer
, который, как мы надеемся, является производным от WrapperType
, созданного для каждого типа в пакете параметров Args
:
template< typename... Args >
struct Composer : public WrapperType<Args>...
{
Composer() : WrapperType<Args>{}...
{}
void display()
{
((WrapperType<Args>...)::wrapee_).display(); // HOW?
}
};
Предполагая, что у каждого обернутого типа есть функция-член display()
, как я могу вызвать функцию display()
для каждого типа в пакете параметров?
т.е. Если бы у меня был:
Composer< T1, T2, T3 > myComposer{};
myComposer.display();
Я хочу, чтобы myComposer.display()
позвонил display()
для T1
, T2
, T3
.