1

什么是被接受的行话(如果有的话)来描述只能虚拟调用的方法以及从基础中的其他方法调用的方法?我偶尔会看到这被称为回调,但这似乎与该术语的原始定义相去甚远。我什至不确定这是否值得被称为模式,但我试图在评论我的代码时变得更加精确。谢谢您的帮助!

// Abstract class.
class A {
public:
  void run() { while (call()) { /* ... */ } }
private:
  virtual bool call() = 0;
};

// Completion/specialization of A.
class B : public A {
private:
  // Standard term to indicate this pattern?
  bool call();
};

摘要:这似乎被称为非虚拟接口模式,是模板方法模式的一个特例。感谢尼克和史蒂文的帮助!

4

4 回答 4

5

可能是模板方法模式

于 2010-07-22T14:01:03.513 回答
3

这有时被称为“非虚拟接口”(或 NVI)模式。当虚函数的实现需要在派生类之间有所不同时,通常使用它,但基类需要控制函数何时被调用。

例如,基类可以在虚拟调用之前或之后进行另一个函数调用,而不是将虚拟函数公开并依靠覆盖来自己调用基实现(并且在正确的时间!)

于 2010-07-22T14:01:27.020 回答
1

我听说过你的界面中没有任何virtual功能的模式,即非虚拟接口模式,简称NVI

在其他上下文中,它被称为模板方法模式,其中您run()模板方法,派生类跳进来填补空白。

于 2010-07-22T14:02:00.767 回答
0

嗯……私人虚拟?为什么要发明新术语?这是一种语言结构,而不是成语,在我看来,它不够有趣,不能被称为模式。

于 2010-07-22T14:01:05.727 回答