gpt4 book ai didi

c++ - 运行时类型检查

转载 作者:行者123 更新时间:2023-11-30 01:56:42 27 4
gpt4 key购买 nike

我有一个关于运行时检查操作的问题。如果一个类包含从 BPAbstract 派生的对象的 vector(BPAbstract 是纯虚拟的),例如:

typedef std::shared_ptr<BPAbstract> Ptr;
std::vector<BPAbstract::Ptr> objects_;

现在假设我想在 vector 中对特定类型的对象进行分组。

template<class T>
void
GetObjectsByType( std::vector<typename T::Ptr> list ) const
{
for( BPAbstract::Ptr i : objects_ )
{
// ???? ....
}
}

什么是最好的实现?一种解决方案是尝试将 i 转换为 T 类型,如果结果不为空,则我可以将其添加到列表 list .我很确定有人知道更好的解决方案...

关于更好地实现该想法的建议也是可以接受的!

最佳答案

你需要dynamic pointer cast你的问题是already answered

template<class T>
void
GetObjectsByType( std::vector<typename T::Ptr> list ) const
{
for( BPAbstract::Ptr i : objects_ )
{
T::Ptr candidate = std::dynamic_pointer_cast<T>(i);
if (candidate)
list.add(candidate);
}
}

关于c++ - 运行时类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19546387/

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