用于描述仅虚拟调用的方法以及基础中的其他方法的行话(如果有的话)是什么?我偶尔会看到这被称为回调,但这似乎偏离了该术语的原始定义。我甚至不确定这是一种被称为模式的优点,但我正试图在评论我的代码时变得更加精确。谢谢你的帮助!
// 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();
};
摘要:这似乎被称为非虚拟接口模式,这是模板方法模式的特例。感谢Nick和Steven的帮助!
答案 0 :(得分:5)
答案 1 :(得分:3)
这有时称为“非虚拟接口”(或NVI)模式。它通常在虚函数的实现需要在派生类之间变化时使用,但基类需要控制何时调用函数。
例如,基类可以在虚拟调用之前或之后进行另一个函数调用,而不是将虚函数公开并依赖覆盖来自行调用基本实现(并且在正确的时间!)
答案 2 :(得分:1)
我听说您的界面中没有任何virtual
功能的模式为非虚拟接口模式,简称 NVI 。
在其他情境中,它被称为模板方法模式,其中run()
是模板方法,派生类会跳入以填补空白。
答案 3 :(得分:0)