[英]Getting an object of a specific derived class, from a vector of base class objects
[英]What is a good design pattern for getting object of specific derived class from a list of base class pointers?
想象一下,我有一個名為Test
的類,在這個類中,我有一個指針列表,它們的類型都來自Base
類。 盡管存儲在 list 中的任何指針都是指向從類Base
派生的類的對象的指針。 我想為特定派生類型提供一個getter()
函數,它返回特定類的對象。 請注意,我們不知道類中所需指針的索引。
class Base
{
/// Base class do have a pure virtual function
};
class Derived1
{
};
class Derived2
{
};
Class Test
{
std::vector<Base*> pointers; /// any STL collection... vector may be more frequent
get_derived1_object(); ///
};
我想到了一些像這樣的get_derived1_object()
可能的實現(而且在我看來兩者都有一些問題):
1- 在類中存儲Derived1
對象指針的副本指針。 如果我想嘗試使用unique_pre
這不是一個好的解決方案。
2- 遍歷pointers
以使用運行時類型檢查查找哪個項來自Derived1
類。 (例如嘗試使用dynamic_cast
或類似的東西)。 在我的用例中,最好不要使用運行時類型檢查。
PS:每個類的多個項目在這里並不重要,因為我確定我的列表中沒有來自同一類的 2 個不同的指針,並認為它已得到處理。
我想知道是否可以找到提供像get_derived1_object
這樣的函數的最佳解決方案(無論是來自我自己給定的解決方案還是其他解決方案)。
而不是向量,使用std::type_index
的關聯映射到基指針。 確保只使用匹配的類型索引,然后就不需要dynamic_cast,因為我們知道類型會匹配映射的指針。 也就是說, std::type_index
仍然依賴於 RTTI。 不需要線性搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.