2017-12-18 284 views
-1

基本问题是否有人知道在C++中的这种方法?第2类是Class1的子类,它必须保持这种状态。C++指针强制重载

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 =基类如球员 类2 =子类如武器

的Class1具有指向具有类似起源相同的价值观

球员有一个指针指向武器 子类基本我想要做的就是

GetEntity返回类型的球员的指针(但返回值也可以是武器)

基本上现在就是我想要做的就是像自动化

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); 

铸造它的过程,而不铸造它。

+0

公有继承...... – StoryTeller

+0

即使我在Class1的Class2中插入数据,我仍然需要投射我试图自动化的指针。 – Shizo

+0

不,你让'Class1'继承自'Class2' ...决定你的后面是哪一个* -a *关系。 – StoryTeller

回答

0

你想要达到的确切目标是无法完成的。原因是行Class2* b = a;根本不处理类的类型,ab都是内置指针类型。当所有操作数都是内置的非枚举类型时,无法引入操作的自定义行为。

+0

编辑了这篇文章,并提供了更多关于究竟发生了什么的信息。一般的投射确实有效,但它会在没有投射的情况下产生编译器错误,这正是我想要以任何方式解决的问题。 – Shizo

+0

@NOBANPLZGod你的编辑是无稽之谈。如果'武器'是一种类型,你不能'Weapon = p2',因为它试图给一个类型赋值。无论如何,问题在于:你不能在两个指针类型之间引入转换操作符。 – Angew

+0

是的,我添加它忘记声明一个变量名两次,这使得它看起来有意无意。 同样在一个字符串类中强制它返回一个char *也是一样,所以在定义一个自定义类指针强制转换的时候应该有所不同。尽管如此,听起来你有一个点,所以我会尝试找到关于该主题的更多信息。 – Shizo