與其他用戶一樣,我試圖實現不可能或非常複雜的事情。我讀了很多問題,比如「遍歷所有派生類」,但正如我所見,這是不可能的。但我想問的是可以自動註冊派生類。也許使用一些模板。或者,例如使用帶有特殊名稱的模板函數(例如template<typename T> void register(SomeFabric* f, T* t = new T())
)並遍歷所有'註冊'類型(如果可能的話)。或者使用另一個特殊函數(例如void register(SomeFabric* f, Base* base)
)並遍歷所有可用類,如果可以使用此參數調用此特殊函數,並且可以實例化可迭代類 - 請調用它。 如果完全不可能:註冊類最簡單(開發者操作的最低數量)方式是什麼?使用C++自動註冊派生類11
0
A
回答
0
最簡單的解決辦法是保持在基類的靜態字段派生類的列表:
static vector<*BaseClass> children;
然後寄存器新的BaseClass的構造函數實例:
children.push_back(this)
而且刪除來自基類析構函數中的註冊表。
不要從派生類忘記調用父類的構造:
Derived(int a, int b) : BaseClass() {...}
注意,雖然這種解決方案將工作,它是差但從架構的角度。它介紹了全球的狀態以及與之相關的所有問題。
相關問題
- 1. 自動使用派生類
- 2. C#make類自動註冊
- 3. 強制派生類型的註冊
- 4. 自動將C++ 11自動關鍵字重寫爲派生類型
- 5. C++使用派生類
- 6. 從派生自同一類的類派生的C++子類
- 7. 自動協變類派生
- 8. Python派生類在派生類上自動運行類方法
- 9. 統一自動註冊類
- 10. 派生自具有批註的類@PostConstruct
- 11. C++派生類
- 12. C++派生類
- 13. CLI C++派生自C#一次性類
- 14. 從已註冊的通用接口獲取派生類型
- 15. 使用Castle.Windsor註冊攔截器只爲派生類,而不是基類
- 16. C++:調用派生類
- 17. 使用Boost序列化註冊用戶提供的派生類型
- 18. 在派生類C++
- 19. 在運行時使用派生類C++
- 20. C#。我可以自動替換派生類而不是基類
- 21. C++派生自本機類型
- 22. 如何自動派生DataKinds派生類型的Typeable實例?
- 23. 派生自抽象類,僅引用派生類
- 24. 使用HWIOAuthBundle自動註冊用戶
- 25. 在中央列表中註冊派生類
- 26. 使用不帶包的HTML編輯器註冊HTML派生的內容類型?
- 27. 可擴展的自動化類註冊在C++中的C++
- 28. C++ - 派生類到基類
- 29. 使用在基類派生類,而派生類的基類
- 30. 將shared_ptr向下轉換爲包含weak_ptr C++的派生類11
您似乎想要自我註冊抽象工廠。像這裏描述的那樣:http://www.dorodnic.com/blog/2014/03/29/abstract-factory/ – Baldrick
@Baldrick葉,這是我想要的。 Thankyou爲鏈接。這非常有用。如果沒有人會提供更有用的東西,我想我會請你寫回答。 – Megaxela
您正在討論解決某些問題的方法。該解決方案與「迭代所有派生類」或「註冊派生類」有關。首先,這意味着什麼*不清楚*(你的意思是實例嗎?類?你想要在註冊表中重複使用哪些類?),並且計算出你想要的功能是不可能的,因爲你不需要提到這個「解決方案」試圖解決的根本問題。請澄清潛在的問題。通過迭代派生類來明確你的意思,並給出具體的程序行爲例子。 – Yakk