Я знаю, что этот код не будет работать, но есть ли у вас какие-либо идеи, как это сделать?
Чтобы это работало, вам нужно
(1) добавить многоточие (...
), наследующее Args...
class MyClass : public Args...
// ........................^^^
(2), сделать MyClass
a struct
или сделать public
конструктором
(3) удалить<class... Args>
часть, определяющая конструктор (он неявный)
(4), добавьте несколько следующим образом
Args const & ... as
для аргументов конструктора
(5) добавьте точку с запятойкласс или структура
Теперь работает следующий код
struct Base1 {};
struct Base2 {};
struct Base3 {};
template<class... Args>
struct MyClass : public Args...
{
MyClass (Args const & ...)
{ }
};
int main()
{
MyClass<Base1, Base2, Base3>(Base1{}, Base2{}, Base3{});
MyClass(Base1{}, Base2{}, Base3{}); // C++17 only
}
Обратите внимание на последнюю строку в main()
MyClass(Base1{}, Base2{}, Base3{}); // C++17 only
Работает только из C ++ 17, потому что используетновый C ++ 17: руководства по выводам.
В вашем случае существуют неявные руководства по выводам, которые позволяют выводить типы шаблонов класса из типов аргумента, передаваемого конструктору.
Другим примером использования (более полезным?) Может быть
MyClass mc{ Base1{}, Base2{}, Base3{} };