Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 纯虚函数是否可以是可变函数模板?;_C++_Templates_Stl - Fatal编程技术网

C++ 纯虚函数是否可以是可变函数模板?;

C++ 纯虚函数是否可以是可变函数模板?;,c++,templates,stl,C++,Templates,Stl,我可以这样写一个类吗: 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)

我可以这样写一个类吗:

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) {
  }
};

如果这是不可能的,有什么方法可以实现吗?

没有。虚拟函数根本不能是模板。这适用于任何模板(变量或非变量),以及所有虚拟函数(纯函数或非纯函数)


如果你仔细想想,这是有道理的。模板不是一个函数,它是一个模板,当编译器调用它时,编译器将通过它生成一个函数。另一方面,虚拟函数必须是实函数,编译器通过函数指针调用它以实现多态行为。

否。虚拟函数根本不能是模板。这适用于任何模板(变量或非变量),以及所有虚拟函数(纯函数或非纯函数)


如果你仔细想想,这是有道理的。模板不是一个函数,它是一个模板,当编译器调用它时,编译器将通过它生成一个函数。另一方面,虚拟函数必须是实函数,编译器通过函数指针调用该函数以实现多态行为。

一种可能的解决方法是为参数定义标准化结构并依赖多态性。比如:)@fareano好主意,谢谢fareano!一个可能的解决办法是为参数定义一个标准化结构,并依赖多态性。比如:)@fareano好主意,谢谢fareano!