在 C++ 中,接口可以由其方法是纯虚拟的类来实现。
这样的类可以是库的一部分,用于描述对象应该实现哪些方法才能与库中的其他类一起工作:
class Lib::IFoo
{
public:
virtual void method() = 0;
};
:
class Lib::Bar
{
public:
void stuff( Lib::IFoo & );
};
现在我想使用 class Lib::Bar
,所以我必须实现IFoo
接口。
出于我的目的,我需要一个完整的相关类,所以我想使用一个保证使用 NVI 习语的常见行为的基类:
class FooBase : public IFoo // implement interface IFoo
{
public:
void method(); // calls methodImpl;
private:
virtual void methodImpl();
};
FooBase::method()
非虚拟接口 (NVI )习惯用法应该拒绝派生类IFoo
覆盖FooBase::method()
.
如果我想使用 NVI 成语,除了已经建议的 pImpl 成语之外,我还有哪些选择(感谢 space-c0wb0y)。