我在使用 dynamic_casting 时遇到了一些麻烦。我需要在运行时确定对象的类型。这是一个演示:
#include <iostream>
#include <string>
class PersonClass
{
public:
std::string Name;
virtual void test(){}; //it is annoying that this has to be here...
};
class LawyerClass : public PersonClass
{
public:
void GoToCourt(){};
};
class DoctorClass : public PersonClass
{
public:
void GoToSurgery(){};
};
int main(int argc, char *argv[])
{
PersonClass* person = new PersonClass;
if(true)
{
person = dynamic_cast<LawyerClass*>(person);
}
else
{
person = dynamic_cast<DoctorClass*>(person);
}
person->GoToCourt();
return 0;
}
我想做上面的事情。我发现这样做的唯一合法方法是事先定义所有对象:
PersonClass* person = new PersonClass;
LawyerClass* lawyer;
DoctorClass* doctor;
if(true)
{
lawyer = dynamic_cast<LawyerClass*>(person);
}
else
{
doctor = dynamic_cast<DoctorClass*>(person);
}
if(true)
{
lawyer->GoToCourt();
}
这样做的主要问题(除了必须定义一堆不会使用的对象之外)是我必须更改“人”变量的名称。有没有更好的办法?
(我不允许更改任何类(Person、Lawyer 或 Doctor),因为它们是将使用我的代码的人拥有并且不想更改的库的一部分)。
谢谢,
戴夫