(Я не уверен, что это подпадает под шаблоны или виртуальные функции или некоторые из них).Расширяемые методы базового класса?
Предположим, что у нас есть базовый класс (например, tuple2) с двумя значениями x, y. Этот базовый класс имеет метод «норма», который работает на x, y, такой как (sqrt (x x + y y)).
Теперь мы хотим расширить этот класс таким образом, чтобы:
struct tuple2
{
double x,y;
double norm() {return sqrt(x*x+y*y);}
double dotProd (const tuple2& other) {return other.x*x+other.y*y;}
}
struct tuple3:public tuple2
{
double z;
}
tuple3 добавляет одну переменную.
Можно ли определить метод базового класса, чтобы он мог обрабатывать x, y и z вместе без перегрузки?
Функции не идентичны, но имеют одинаковые модели . Я предполагаю, что я ищу какой-то шаблон, который расширяет число переменных, а не только тип?
Как насчет использования 'vector' для передачи произвольного числа чисел в' dotProd'? Вы можете сделать это 'initializer_list', если вам не нравятся копии и динамическая память. – nwp
Ограниченный этим случаем кортежа, он помог бы сохранить переменные-члены в контейнере. [variadic templates] (http://en.cppreference.com/w/cpp/language/parameter_pack) может помочь, но я думаю, что он становится довольно сложным. – stefaanv
@nwp: с помощью вектора добавляются 12-байтовые служебные данные. Взяв пример буквально, мы могли бы просто определить tuple3 с тремя двойниками и использовать его для всего. Нет? –