覆盖纯虚函数的参数数量

Jir*_*Jir 19 c++ virtual overloading interface

我已经实现了以下界面:

template <typename T>
class Variable
{
public:
  Variable (T v) : m_value (v) {}
  virtual void Callback () = 0;
private:
  T m_value;
};
Run Code Online (Sandbox Code Playgroud)

一个适当的派生类将定义如下:

class Derived : public Variable<int>
{
public:
  Derived (int v) : Variable<int> (v) {}
  void Callback () {}
};
Run Code Online (Sandbox Code Playgroud)

但是,我想派生Callback接受不同参数的类(例如:void Callback (int a, int b)).有没有办法做到这一点?

Mat*_* M. 18

这是我多次遇到的问题.

这是不可能的,并且有充分的理由,但有很多方法可以实现基本相同的事情.就个人而言,我现在使用:

struct Base
{
  virtual void execute() = 0;
  virtual ~Base {}
};

class Derived: public Base
{
public:
  Derived(int a, int b): mA(a), mB(b), mR(0) {}

  int getResult() const { return mR; }

  virtual void execute() { mR = mA + mB; }

private:
  int mA, mB, mR;
};
Run Code Online (Sandbox Code Playgroud)

在行动:

int main(int argc, char* argv[])
{
  std::unique_ptr<Base> derived(new Derived(1,2));
  derived->execute();
  return 0;
} // main
Run Code Online (Sandbox Code Playgroud)

  • 因为语言没有这样设计.您对虚拟方法的唯一余地是返回类型的协方差.你可以(可以想象)要求一个'参数'接口类,然后使用这个类的派生版本,然后继续在方法中的`dynamic_cast` ...但是,嗯,那闻起来:p (3认同)

Oli*_*rth 10

即使这样的事情是可能的,将它作为虚函数也不再有意义,因为派生的实例化不能通过指向基类的指针进行多态调用.