比方說,我有一個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