gpt4 book ai didi

c++ - 在多态指针 vector 中搜索特定类型及其子类型

转载 作者:行者123 更新时间:2023-11-28 07:10:00 26 4
gpt4 key购买 nike

我有一个指向多态对象指针的 vector _v_polymorph,我编写了一个模板方法来收集指向特定类型对象的所有指针:

template <class T> vector<T*> collect_all() const {
vector<T*> v;
for (auto e : _v_polymorph) {
if ( typeid(T) == typeid(*e) ) {
v.push_back(static_cast<T*>(e));
}
}
return v;
}

我想对此进行修改,以便将 T 的子类实例也收集到返回的 vector 中。

我的想法是测试与 dynamic_cast 的关系,你会这样做吗?

最佳答案

C++面向对象的正确方式:

obj->DoTheRightThing(); // does the right thing!

错误的方式:

if (( a = dynamic_cast<A*>(obj) ))
a->DoTheAThing();
else if (( b = dynamic_cast<B*>(obj) ))
b->DoTheBThing();
else ... // what if another sibling is added to A and B?

完全错误的方式:

 if ( typeid(*obj) == typeid(A) )
(dynamic_cast<A*>(obj))->DoTheAThing();
else ... // what if another sibling OR descendant is added?

所以你的想法是朝着正确的方向迈出一步但也要考虑下一步。

关于c++ - 在多态指针 vector 中搜索特定类型及其子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21160505/

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