当前位置:  开发笔记 > 编程语言 > 正文

这种间接函数调用的优点是什么?

如何解决《这种间接函数调用的优点是什么?》经验,为你挑选了1个好方法。

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

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;
};

Michael Kris.. 10

这是非虚拟接口成语(NVI).Herb Sutter的那篇页面有很多细节.但是,使用C++ FAQ Lite 在这里和这里所说的内容,可以缓解你所阅读的内容.

NVI的主要优点是将接口与实现分离.基类可以实现通用算法并将其呈现给世界,而其子类可以通过虚函数实现算法的细节.外部用户可以避免算法细节的变化,特别是如果您以后决定要添加预处理和后处理代码.

明显的缺点是你必须编写额外的代码.此外,private虚拟功能让很多人感到困惑.许多程序员错误地认为你无法覆盖它们.Herb Sutter似乎喜欢private虚拟,但恕我直言,它在实践中更有效地遵循C++ FAQ Lite的建议并制作它们protected.



1> Michael Kris..:

这是非虚拟接口成语(NVI).Herb Sutter的那篇页面有很多细节.但是,使用C++ FAQ Lite 在这里和这里所说的内容,可以缓解你所阅读的内容.

NVI的主要优点是将接口与实现分离.基类可以实现通用算法并将其呈现给世界,而其子类可以通过虚函数实现算法的细节.外部用户可以避免算法细节的变化,特别是如果您以后决定要添加预处理和后处理代码.

明显的缺点是你必须编写额外的代码.此外,private虚拟功能让很多人感到困惑.许多程序员错误地认为你无法覆盖它们.Herb Sutter似乎喜欢private虚拟,但恕我直言,它在实践中更有效地遵循C++ FAQ Lite的建议并制作它们protected.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有