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
是使用相同的字符串文字初始化的。@eszeikial
GetUserData()的返回类型是什么
?使用
std::string
。是的,在你抱怨效率之前:它是有效的。这正是我要问的。我要查找vtable,因为我不知道那是什么哈哈。
if ((char*)fixtureAData == "PLATFORM" && (char*)fixtureBData == "WEAPON"){
    static_cast<Weapon*>(contact->GetFixtureA()->GetBody()->GetUserData())->SetLethality(false);