gpt4 book ai didi

c++ 到 c#'s "作为”?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:16 24 4
gpt4 key购买 nike

如何将结构转换为它的一种基本类型?

在 c# 中,您可以使用关键字“as”来做到这一点,例如 Entity as Monster。我如何在 C++ 中执行此操作?

这是我的结构:

struct Entity
{
USHORT X;
USHORT Y;
UINT Serial;
USHORT SpriteID;
};

struct Monster : Entity
{
UINT UNKNOWN;
BYTE Direction;
USHORT Type;
};

struct Item : Entity
{
BYTE UNKNOWN1;
USHORT UNKNWON2;
};

struct NPC : Entity
{
UINT UNKNOWN1;
BYTE Direction;
BYTE UNKNOWN2;
BYTE NameLength;;
byte Name[];
};

最佳答案

在 C++ 中,这种可能性仅存在于指向多态 类型(即具有至少一个虚函数的类型)对象的指针。你可以用 dynamic_cast<PtrType> 来做.

这是一个完整的例子(also on ideone):

#include <iostream>
using namespace std;

struct A {virtual void foo(){}};
struct B {virtual void foo(){}};

int main() {
A *a = new A();
B *b = new B();
A *aPtr1 = dynamic_cast<A*>(b);
cout << (aPtr1 == 0) << endl; // Prints 1
A *aPtr2 = dynamic_cast<A*>(a);
cout << (aPtr2 == 0) << endl; // Prints 0
delete a;
delete b;
return 0;
}

第一个dynamic_cast失败,因为 b指向与 A* 不兼容类型的对象;第二个dynamic_cast成功。

关于c++ 到 c#'s "作为”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13991617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com