所以我有一个包含Component抽象类的指针的向量,并且让我说我有来自component,foo和bar的2个继承类,有没有办法让指针具有类型"富"从这个向量?
vector<Component*> components;
class foo : Component;
class bar : Component;
components.push_back(new foo());
components.push_back(new bar());
感谢。
答案 0 :(得分:2)
是的:
Component* c = components[0];
if (foo* f = dynamic_cast<foo*>(c)) {
// use f
}
else {
// c is not a foo. Maybe it's a bar, or something else
}
因此,如果你想编写一个函数来查找 foo*
,你可以这样做(假设是C ++ 11):
foo* find_foo(const std::vector<Component*>& components)
{
for (auto c : components) {
if (foo* f = dynamic_cast<foo*>(c)) {
return f;
}
}
return nullptr;
}
演员阵容dynamic_cast<foo*>
将返回有效的foo*
或nullptr
,不会投掷。从标准§5.2.7.9:
失败的强制转换为指针类型的值是所需结果类型的空指针值。
答案 1 :(得分:1)
是的,您可以通过使用RTTI的概念来实现: -
#include <typeinfo>
//Using for loop iterate through all elements
if ( typeid(*iter) == typeid(Foo) )
//You got the Foo object
但这在C ++中几乎不可取。