C++在实现的纯虚方法中自动从父抽象类调用检查方法?

jus*_*rld 0 c++ virtual abstract-class pure-virtual

我在C++中有这个抽象类:

class A {
public:
  A(int size);
  virtual void doSomething(int inputSize) = 0;
protected:
  virtual bool checkSize(int inputSize);
private:
  int size;
}

A::A(int size) : size(size){}
bool A::checkSize(int inputSize) { return size == inputSize; }
Run Code Online (Sandbox Code Playgroud)

现在,我想要保证的是,对于每个B派生的类A doSomething都是这样的:

class B : public A{
  void doSomething(int inputSize);
}

void B::doSomething(int inputSize){
  if(!checkSize(inputSize)){
     std::cerr<<"wrong inputSize!"<<std::endl;
     return;
  }
  //do something...
}
Run Code Online (Sandbox Code Playgroud)

我怎么能保证从每个派生类A工具doSomething以这种方式开始?

Hol*_*olt 5

你分成doSomething两部分:

class A {
public:
  void doSomething(int inputSize) {
    if (!checkSize(inputSize)){
       std::cerr << "wrong inputSize!" << std::endl;
       return;
    }
    doSomething_(inputSize);
  }
protected:
  virtual void doSomething_(int) = 0;
};
Run Code Online (Sandbox Code Playgroud)

而在B你只执行doSomething_.