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