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