这种间接函数调用有什么好处?

2024-06-18

我在库中找到了以下代码:

class Bar {
public:
  bool foo(int i) {
   return foo_(i);
  }
private:
  virtual bool foo_(int i) = 0;
};

现在我想知道:为什么要使用这种间接方式?是否有任何理由说明上述方法比简单的替代方案更好:

class Bar {
public:
  virtual bool foo(int i) = 0;
};

这是非虚拟接口惯用法 http://www.gotw.ca/publications/mill18.htm(NVI)。 Herb Sutter 的那一页有很多关于它的细节。但是,请根据 C++ FAQ Lite 的内容来调整您在那里阅读的内容here http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.3 and here http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.4.

NVI 的主要优点是将接口与实现分离。基类可以实现通用算法并将其呈现给世界,而其子类可以通过虚函数实现算法的细节。外部用户不会受到算法细节更改的影响,特别是如果您后来决定添加预处理和后处理代码。

明显的缺点是您必须编写额外的代码。还,private虚函数让很多人感到困惑。许多编码员错误地认为你不能覆盖它们。赫伯·萨特似乎喜欢privatevirtuals,但恕我直言,在实践中遵循 C++ FAQ Lite 的建议并使它们更有效protected.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这种间接函数调用有什么好处? 的相关文章

随机推荐