152得票6回答
一个私有的纯虚函数的作用是什么?

我在一个头文件中看到了以下代码:class Engine { public: void SetState( int var, bool val ); { SetStateBool( int var, bool val ); } void SetState( int...

34得票2回答
C#/C++中的非虚拟接口设计模式

在设计接口时,有人建议使用非虚拟接口模式。请简要概述一下这种模式的好处是什么?

12得票4回答
在CTRP派生类中没有名为'type'的类型。

我一直在尝试使用奇异递归模板模式来实现一个通用的单参数函数对象,并有两种实现方式:一种是使用模板模板参数,可以正常工作;另一种是我尝试在接口类中访问派生Functor::type,在后者的例子中,编译器(gcc 5.4.0)报告错误: error: no type named 'type'...

10得票2回答
C++:NVI模式和模板方法模式的区别?

什么是NVI(非虚拟接口)和模板方法模式之间的区别? 它们看起来非常相似,我已经读过它们基本上是相同的,也读过它们微妙地不同,其中模板方法更加通用。

8得票2回答
根据NVI原则,为什么虚函数不能是公有的?

C++中的私有和受保护的虚方法以及不使用公共虚方法是否有任何有效理由?讨论了非虚拟接口(NVI)和非公共虚函数及它们之间的关系。Scott Meyers在《Effective C++》中也提到: 有时候,虚函数甚至必须是public的,但此时NVI习惯用法就无法应用了。 我没看懂的是为...

7得票4回答
非虚拟接口(NVI)习惯用法在C#中是否像在C++中一样有用?

在C++中,我经常需要使用NVI来确保我的API的一致性。虽然我在C#中看不到它被广泛使用,但我想知道这是因为C#作为一种语言提供了使NVI变得不必要的功能吗?(在需要时,我仍然会在C#中使用NVI。)