我可以这样写一个类吗:
class Base {
template <typename...Args>
virtual double calculate(const Args&...args) = 0;
};
然后我想这样写派生类:
class Derived1 : public Base {
double calculate(int a) {
}
};
class Derived2 : public Base {
double calculate(int a, int c) {
}
};
如果做不到,有没有什么方法可以做到呢?
不行。虚函数根本不能是模板。这适用于任何模板(variadic或非variadic)以及所有虚函数(pure或非pure)。
想一想,也不无道理。模板不是一个函数,它是一个模板,编译器在调用它时将通过它来制作一个函数。另一方面,虚函数必须是实函数,编译器通过函数指针调用它来实现多态行为。