Опитвам се да използвам различни шаблони за съставяне на клас. Идеята е, че класът 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
.