假設我有200個類名爲class1,類2等從類派生,並在1到200之間的整數,有沒有辦法具體實例化取決於派生類的一個我的整數值?顯然,我可以手動檢查每一個值,但我不知道是否有在C++什麼是更靈活C++ - 根據上下文實例化派生類
1
A
回答
5
你將不得不做一臺交換機上的整數,實例化的具體類。如果你在程序的其他地方有這個int
- >class
邏輯,你可以考慮用編譯時地圖來代表它。看看Boost.MPL,特別是boost::mpl::map
。
1
如果你正在尋找一個反射式系統,在這裏你可以看到所有的類,然後實例化它們動態無。您可以在運行時對象上使用typeid來查看它們是否相同,但我相信它的行爲是實現定義的。
1
如果你能模板類,即名稱,而不是他們
template <int I> class Foo;
class FooI
,您可以使用編譯時或運行時的數據結構來選擇合適的類。
2
這可能只是一個做同樣的事情的更長的路,但你可以有像這樣每個派生類中的工廠方法...
std::auto_ptr<BaseClass> createClass0()
{
return std::auto_ptr<BaseClass>(new Class0());
}
然後定義這些功能的陣列
typedef std::auto_ptr<BaseClass> (*pt2Creator)();
pt2Creator creators[] = {createClass0, ...};
然後,你可以做
std::auto_ptr<BaseClass> createClass(int n)
{
return creators[n]();
}
如果你試圖讓編寫代碼的對於每個類,這不會對你有所幫助,但是如果問題是在運行時根據整數創建哪個類,那麼這將做到這一點。
您可能還想使用標準集合類型而不是C風格的數組。
相關問題
- 1. 在C++中實例化派生類型
- 2. 實例化派生自MonoBehaviour的類
- 3. 從基類實例化派生對象
- 4. 在基類中使用「new this.GetType()」來實例化派生類
- 5. C++:根據參數實例化模板化類
- 6. 來自類實例的派生類?
- 7. 從基類返回派生類實例
- 8. 基類中派生的實例
- 9. 如何從基類的實例初始化派生類的實例?
- 10. 從父類的實例創建派生類的實例
- 11. 基類的實例如何保存派生類的實例?
- 12. 如何在派生類之前自動實例化基類
- 13. 實例化派生類對象,其基類ctor是私人的
- 14. 如何實例化派生自抽象類的類
- 15. 如何通過映射實例化派生類中的對象
- 16. 如何自動派生DataKinds派生類型的Typeable實例?
- 17. 在C#中使用基類和派生類實例化數組中的對象#
- 18. C++如何從派生類實例調用模板化的基類函數
- 19. 根據封裝對象的類型初始化派生類
- 20. 實例化一個類(或派生)與內部構造
- 21. ASP.Net MVC 3 - 在BaseController中實例化數據上下文類
- 22. C++實例化類
- 23. C#創建類和派生類的實例
- 24. 保存從基類派生的實例
- 25. 隨機實例派生的類
- 26. 類型系列和派生實例(Eq)
- 27. MEF導出派生類和新實例
- 28. C++派生類
- 29. C++派生類
- 30. C#實例化一個基礎對象作爲派生對象
是否有可能做一些新的線Foo 只有在運行時才知道? – lezebulon
不,但您可以通過我或查找表輕鬆設置編譯時遞歸來選擇正確的Foo。 – thiton