我有一个关于运行时检查操作的问题。如果一个类包含一个vector派生自BPAbstract(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,如果结果不为 null,那么我可以将其添加到列表中list。我很确定有人知道更好的解决方案...
更好地实施该想法的建议也是可以接受的!