提问人:Shizo 提问时间:12/18/2017 最后编辑:Shizo 更新时间:12/18/2017 访问量:1055
C++ 指针强制转换重载
c++ pointer cast overload
问:
基本问题是有没有人知道 c++ 中的方法?Class 2 是 Class1 的子类,它必须保持这种状态。
Class1* a;
Class2* b = (Class2*)a;
basically allowing you
Class1* a;
Class2* b = a;
// tried this but didn't seem to work
class Class1
{
operator Class2*() { return (Class2*)this; }
}
如果这是一个迟钝的问题/重复,我真的找不到任何对不起的东西,但我并没有完全理解这个问题。如果someoen有类似的东西,将不胜感激。
编辑:一些额外的信息 Class1 = 基类,例如 Player Class2 = 子类,例如 Weapon
Class1 包含指向具有相同值(如 origin)的 Subclass 的指针
玩家有一个指向武器的指针 基本上我想做的是
GetEntity 返回 Player 类型的指针(但返回值也可以是 Weapon)
基本上,现在我想做的是自动化铸造过程,就像
Player* p = GetEntity(0);
Player* p2 = GetEntity(1);
Weapon wpn = (Weapon*)p2;
//so that you are able to do
Weapon wpn = p2;
// Also that Stuff like that would be possible
void Test(Weapon *wpn);
Player *player = GetEntity(1);
// Yes I know this works Test((Weapon*)player) but I am lazy and that's the goal
Test(player);
没有铸造它。
答:
1赞
Angew is no longer proud of SO
12/18/2017
#1
你试图实现的确切事情是无法做到的。原因是该行根本不处理类类型,两者都是内置指针类型。当所有操作数都是内置的非枚举类型时,无法引入操作的自定义行为。Class2* b = a;
a
b
评论
0赞
Shizo
12/18/2017
编辑了这篇文章,并提供了更多关于到底发生了什么的信息。一般的强制转换确实有效,但它会在没有强制转换的情况下产生编译器错误,这正是我试图以任何方式修复的。
0赞
Angew is no longer proud of SO
12/18/2017
@NOBANPLZGod 你的编辑是无稽之谈。如果是类型,则不能执行,因为这是尝试为类型赋值。无论如何,要点是:您不能在两种指针类型(句点)之间引入转换运算符。Weapon
Weapon = p2
0赞
Shizo
12/18/2017
是的,我添加了它忘记声明变量名称两次,这使它看起来是故意的,但事实并非如此。同样,在字符串类转换中,它返回 char* 也有效,因此定义自定义类指针转换的区别应该在哪里。不过,听起来你说得很有道理,所以我会尝试找到更多关于这个话题的信息。
0赞
Angew is no longer proud of SO
12/18/2017
@NOBANPLZGod 定义从 到 的自定义转换时,必须是类或枚举。这就是语言的规则。就你而言,它们都是指针:不行。X
Y
X
Y
0赞
Shizo
12/18/2017
嗯,听起来很合乎逻辑,我会把它标记为我猜的答案。只是想解决一些烦人的问题,但我想我学到了一些新的东西。
评论
Class1
Class2