C++ C++;静态强制转换和虚拟方法功能 if((char*)fixtureAData==“平台”&(char*)fixtureBData==“武器”){ 静态强制转换(contact->GetFixtureA()->GetBody()->GetUserData())->SetLethality(false);
这是我目前正在进行的团队项目中的一段代码 我想知道派生类上的C++ C++;静态强制转换和虚拟方法功能 if((char*)fixtureAData==“平台”&(char*)fixtureBData==“武器”){ 静态强制转换(contact->GetFixtureA()->GetBody()->GetUserData())->SetLethality(false);,c++,virtual,static-cast,C++,Virtual,Static Cast,这是我目前正在进行的团队项目中的一段代码 我想知道派生类上的static\u cast的功能 setlethability是武器的一种方法,如果我用一个名为PlatformCollide的虚拟空区替换它,并在我的dagger类中创建该空区的一个版本,派生函数会被调用吗?还是static_cast不会那样工作?首先:(char*)fixtureAData==“PLATFORM”比较两个指针,但不比较两个字符串。您需要使用。如果编译器使用字符串池,并且fixtureAData也被分配给字符串文本“平
static\u cast
的功能
setlethability
是武器的一种方法,如果我用一个名为PlatformCollide
的虚拟空区替换它,并在我的dagger类中创建该空区的一个版本,派生函数会被调用吗?还是static_cast
不会那样工作?首先:(char*)fixtureAData==“PLATFORM”
比较两个指针,但不比较两个字符串。您需要使用。如果编译器使用字符串池,并且fixtureAData
也被分配给字符串文本“平台”
,则这可能行得通,但这不是一个好的/安全的假设
第二:如果您正在将派生类强制转换为它的基类之一(我猜您正在这样做,但不清楚)然后在该基类上调用一个虚拟函数,它确实会使用vtable来查找要调用的最派生的函数。如果我对您正在做的事情做出错误的假设,请澄清您的问题。只是好奇,为什么不编写它并检查?(char*)fixtureAData==“PLATFORM”
这可能与您认为的不一样。@shuttle87完全正确。它可能对他们有效-我假设fixtureAData
是使用相同的字符串文字初始化的。@eszeikialGetUserData()的返回类型是什么
?使用std::string
。是的,在你抱怨效率之前:它是有效的。这正是我要问的。我要查找vtable,因为我不知道那是什么哈哈。
if ((char*)fixtureAData == "PLATFORM" && (char*)fixtureBData == "WEAPON"){
static_cast<Weapon*>(contact->GetFixtureA()->GetBody()->GetUserData())->SetLethality(false);