我有一个类A和另一个继承自它的类B。我重写了一个函数,这个函数接受类型A的对象作为参数,所以我必须接受一个A。然而,我后来调用了只有B有的函数,所以我想返回false,如果传递的对象不是类型B,就不继续。
找出传递给函数的对象是哪种类型的最好方法是什么?
发布于 2010-12-01 22:04:40
动态类型转换最适合您对问题的描述,但我只想补充一句,您可以通过以下命令找到类类型:
#include <typeinfo>
...
string s = typeid(YourClass).name()
发布于 2008-12-09 05:09:06
这就是所谓的RTTI,但是您几乎肯定想在这里重新考虑您的设计,因为找到类型并基于它做特殊的事情会使您的代码更加脆弱。
发布于 2016-04-01 02:53:28
为了完成,我将在Robocide的基础上构建build,并指出typeid
可以单独使用,而不使用name():
#include <typeinfo>
#include <iostream>
using namespace std;
class A {
public:
virtual ~A() = default; // We're not polymorphic unless we
// have a virtual function.
};
class B : public A { } ;
class C : public A { } ;
int
main(int argc, char* argv[])
{
B b;
A& a = b;
cout << "a is B: " << boolalpha << (typeid(a) == typeid(B)) << endl;
cout << "a is C: " << boolalpha << (typeid(a) == typeid(C)) << endl;
cout << "b is B: " << boolalpha << (typeid(b) == typeid(B)) << endl;
cout << "b is A: " << boolalpha << (typeid(b) == typeid(A)) << endl;
cout << "b is C: " << boolalpha << (typeid(b) == typeid(C)) << endl;
}
输出:
a is B: true
a is C: false
b is B: true
b is A: false
b is C: false
https://stackoverflow.com/questions/351845
复制相似问题