纯虚函数可以是 Variadic 函数模板吗?
Can pure virtual function be Variadic function template?
我可以这样写class吗:
class Base {
template <typename...Args>
virtual double calculate(const Args&...args) = 0;
};
然后我想像这样写派生 class:
class Derived1 : public Base {
double calculate(int a) {
}
};
class Derived2 : public Base {
double calculate(int a, int c) {
}
};
如果这不可能,有什么方法可以实现吗?
没有。虚函数根本不能是模板。这适用于任何模板(可变参数或非可变参数),以及所有虚函数 - 纯的或非纯的。
如果你仔细想想,这是有道理的。模板不是一个函数,它是一个模板,编译器在调用它时将根据它创建一个函数。另一方面,虚函数必须是实函数,编译器通过函数指针调用它来实现多态行为。
我可以这样写class吗:
class Base {
template <typename...Args>
virtual double calculate(const Args&...args) = 0;
};
然后我想像这样写派生 class:
class Derived1 : public Base {
double calculate(int a) {
}
};
class Derived2 : public Base {
double calculate(int a, int c) {
}
};
如果这不可能,有什么方法可以实现吗?
没有。虚函数根本不能是模板。这适用于任何模板(可变参数或非可变参数),以及所有虚函数 - 纯的或非纯的。
如果你仔细想想,这是有道理的。模板不是一个函数,它是一个模板,编译器在调用它时将根据它创建一个函数。另一方面,虚函数必须是实函数,编译器通过函数指针调用它来实现多态行为。