比方说,我有一个C++接口通过C++接口的最佳方式?
class Iface
{
public:
virtual ~Iface() {}
virtual void foo() = 0;
virtual void bar() = 0;
};
而且我有一些组类需要公开在一边实现它关闭别处。我发现相当普遍我结束了一堆的中产阶级基本上做这样的事情:
class InTheMiddleSomewhere
: public Iface // amongst other things
{
public: // Iface
virtual void foo() { if (impl) impl->foo(); }
virtual void bar() { if (impl) impl->bar(); }
private:
IfaceImpl* impl;
};
它得到烦人编写和维护的接口扩展,增殖和变化。
问:是否有更好的(或多或少的自动)方法来实现完整接口的传递,而不是手动编写所有“if(impl)impl - > ...”东西?
派生创建一个类做它与私有继承, 。 – 2012-04-13 13:58:35
可以将'impl'声明为'Iface *'而不是'IfaceImpl *'吗? – dasblinkenlight 2012-04-13 13:59:13
@彼得,非常好的评论,尽管它只解决了部分问题。 (你仍然愿意为每种方法编写它),并且有一些中间类可能想要做些稍微不同的事情的弱点。我真正想要的是“这里有两件完全相同的东西,把它们绑在一起*就像这样*”template/macro/whatever。 – idij 2012-04-13 14:21:42