(我讀其他的依賴性/循環繼承問題,但無法找到這種特殊情況下的答案)C++循環依賴和繼承
我有一個父類,的InputDevice,這將產生兩個子類中的一個。 InputDevice1是我們希望連接到每臺計算機的東西,InputDevice2是可能連接到計算機的東西,我們必須檢查它是否是。 InputDevice1和InputDevice2將具有相同的訪問器,但內部邏輯非常不同。
我似乎無法解決依賴性問題 - 解決方案可能是我還沒有想出來的,或者我的設計可能不好。
我InputDevice.h看起來像
class InputDevice{
private:
InputDevice* inputDevice;
public:
static InputDevice* GetDevice() {
//we expect only one type of device to be
//connected to the computer at a time.
if (inputDevice == nullptr) {
if (InputDevice2::IsConnected)
inputDevice = new InputDevice2();
else
inputDevice = new InputDevice1();
}
return inputDevice;
}
...standard accessors and functions...
};
而且InputDevice1.h是:
class InputDevice1 : public InputDevice{
public:
...declarations of any functions InputDevice1 will overload...
}
雖然InputDevice2.h是:
class InputDevice2 : public InputDevice{
public:
static bool IsConnected();
...declarations of any functions InputDevice2 will overload...
}
我不知道其中文件放入#include語句... InputDevice.h引用InputDevice2.h或其他方式嗎?我也嘗試了前向聲明類,但是這似乎也不起作用。
你在混合概念。 InputDevice定義了一個接口,它不應該知道可能從中繼承哪些類型。不同的類可以處理可用/使用的輸入設備的實際實例。你可以通過仔細地使用前向聲明和分離類型和實現的定義來進行編譯,但是你可能想要考慮重新設計 –