我有一個結構,我使用一個純粹的抽象接口(只有公共方法,它們都是=0
),一個抽象類隱藏實現細節和兩個繼承它的子類。接口和公共方法
我想在這些子類中公開一些公共方法,因爲它們只在該上下文中有意義,但將它們標記爲公共不起作用,因爲編譯器似乎只能在界面中看到公共方法。我怎樣才能讓兒童課程中的公共方法可用?
更新
接口:
class Result {
public:
virtual ~Result() noexcept = default;
protected:
Result() = default;
};
抽象類:
template <typename T>
class AbstractResult : public Result {
public:
AbstractResult();
virtual ~AbstractResult() noexcept = default;
};
第一個孩子:
class AResult : public AbstractResult<PGResult> {
public:
PGResult() = default;
virtual ~PGResult() noexcept = default;
void add_server_status(const char status) noexcept;
void add_command_complete(const CommandComplete command_complete) noexcept;
void add_columns(const vector<Column> columns) noexcept;
void add_error(const Error error) noexcept;
void add_notification(const Notification notification) noexcept;
};
我會喜歡創造的Result
的實例並調用它add_columns(...)
這是由編譯器禁止:
unique_ptr<Result> result.reset(new AResult);
result->add_columns(...)
你可以顯示一些你的代碼作爲參考嗎? –
調用代碼必須使用'dynamic_cast'將參考轉換爲對派生類的引用(並容忍異常),然後調用派生類的方法。 (你也可以動態投射指針 - 你必須檢查'nullptr'的結果) –
你能詳細說明爲什麼你有一個從具體類繼承的抽象類嗎?這不是C++中的典型模式。通常,您的抽象接口將爲所有實現定義一個最小但完整的接口,而不需要知道創建了哪個實現。 –