2017-12-18 289 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