Я хочу определить базовый класс шаблона таким образом, чтобы он принимал переменные аргументы шаблона и определял виртуальный метод для каждого аргумента, где параметром является тип аргумента.
Base
должен дать мне 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 становится неоднозначным. Я не могу заставить работать синтаксис с помощью BaseSingle
. Есть ли способ?
Я знаю, что в качестве альтернативы я могу рекурсивно наследоваться от BaseSingle и передать остальные параметры. Есть ли в этом последствия для производительности?