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