Я хочу определить базовый класс шаблона таким образом, чтобы он принимал переменные аргументы шаблона и определял виртуальный метод для каждого аргумента, где параметр — это тип аргумента.
Например. 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 и передать остальные параметры. Есть ли в этом последствия для производительности?
std::tuple
реализовано таким образом. Я не понимаю, почему вы получите удар по производительности, ваши функции даже не переопределяют друг друга и не передают аргументы во время выполнения, вызывая переопределенный член. - person doublep   schedule 10.03.2012std::tuple
используют рекурсивное наследование. А хороших нет. ;-) - person Howard Hinnant   schedule 10.03.2012