0
我試圖只使用基類的特定部分,同時隱藏其他部分。考慮下面的代碼:,但沒有暴露IY
接口如何限制對基類的一部分的訪問?
struct IX
{
// ...
};
struct IY
{
// ...
};
class Base :
public IX,
public IY
{
// Implements IX and IY.
// ...
};
// Reuse IX implementation, but don't expose IY.
//
class X : protected Base
{
public:
using Base::IX; // <-- Doesn't exist in C++.
};
我可以享受Base
提供的IX
實施?
當然,我可以輸入using Base::IX::xxx
所有方法,它存在於IX
。另外,我所有的呼叫轉發到執行這樣的:
//
class X : public IX
{
public:
// Forward all calls to IX methods to m_p.
// ...
protected:
Base* m_p;
};
但同樣,我必須鍵入IX
可用的方法,以轉發。每次更改IX
時,我都必須更新X
。
謝謝。
亞歷
@ konstantin-d-infragistics'IX'和'Base'已經存在並在其他地方使用。另外,'IX'包含了很多東西,比如'typedef',嵌套類等等。因此,每次修改'IX'都可能是一項艱鉅的任務。 –
@AlexBlekhman我做了和編輯,有兩個建議。第一個仍然假設如果你改變IY你將不得不改變基地。第二個不需要更改。 –
感謝您的回答。但是,爲了使用第二個變體,我必須首先實現'IX'和'IY'。所以,'Base'將會有'IXImpl'和'IYImpl'這樣的成員。它使得其他用戶使用'Base'非常繁瑣。我傾向於認爲這個問題在C++中沒有乾淨的解決方案。所以,從'IX'繼承並在內部轉發所有的調用可能是解決它的最骯髒的方法。 –