簡體   English   中英

從基類指針列表中獲取特定派生類的對象的好設計模式是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM