Я хочу определить базовый класс шаблона таким образом, чтобы он принимал переменные аргументы шаблона и определял виртуальный метод для каждого аргумента, где параметр является типом аргумента.
Например, Base<int, bool, string>
должно датьмне 3 виртуальных метода: Foo(int)
, Foo(bool)
и Foo(string)
.
Я попробовал следующее:
template <typename Param>
struct BaseSingle
{
virtual void Foo(Param) {};
};
template <typename... Params>
struct Base : public BaseSingle<Params>...
{
};
К сожалению, Foo становится неоднозначным.Я не могу заставить работать синтаксис using BaseSingle<Params>::Foo...
.Есть ли способ?
Я знаю, что в качестве альтернативы я могу рекурсивно наследовать от BaseSingle и передавать оставшиеся параметры.Есть ли в этом какие-либо последствия?