gpt4 book ai didi

c++ - 从基类指针列表中获取特定派生类的对象的良好设计模式是什么?

转载 作者:行者123 更新时间:2023-12-02 10:22:42 26 4
gpt4 key购买 nike

想象一下,我有一个名为Test的类,并且在该类中有一个指针列表,它们的类型都来自Base类。尽管存储在列表中的任何指针都是从类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或类似的东西)。在我的用例中,最好不要使用运行时类型检查。

附言:这里每个类都没有多个项目并不重要,因为我确定列表中没有同一个类的2个不同的指针,并认为它已得到妥善处理。

我想知道是否可以找到提供 get_derived1_object之类的功能的最佳解决方案(无论是我自己提供的解决方案还是其他)。

最佳答案

代替 vector ,使用std::type_index的关联映射到基本指针。确保只使用匹配的类型索引,然后就不需要dynamic_cast了,因为我们知道类型将匹配映射的指针。就是说,std::type_index的使用仍然取决于RTTI。不需要线性搜索。

关于c++ - 从基类指针列表中获取特定派生类的对象的良好设计模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59396844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com