2017-12-18 24 views
-1

기본 질문은 누구나 C++에서이 방법을 알고 있습니까? Class 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이 비슷한 물건을 가지고 있다면 감사하겠습니다.

편집 : 몇 가지 추가 정보 클래스 1 =없는 baseclass 예를 들어 플레이어 Class2의 = 서브 클래스 예를 들어 무기 클래스 1은

플레이어가 무기 에 대한 포인터를 가지고 기원처럼 같은 값을 가지고있는 서브 클래스에 대한 포인터를 보유하고

기본적으로 내가 뭘 원하는

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'에서 상속받습니다 ... 당신이 어떤 * is-a * 관계인지를 결정하십시오. – StoryTeller

답변

0

달성하려는 정확한 작업을 수행 할 수 없습니다. 그 이유는 라인 Class2* b = a;이 클래스 유형을 전혀 다루지 않기 때문에 ab은 모두 내장 포인터 유형입니다. 그리고 모든 피연산자가 비 - 열거 형에 내장되어있을 때 연산의 사용자 정의 동작을 소개 할 방법이 없습니다.

+0

이 게시물을 편집하고 정확히 무슨 일이 벌어지고 있는지에 대해 더 많은 정보를주었습니다. 일반 캐스팅은 작동하지만 캐스팅없이 컴파일러 오류가 발생하며 정확하게 수정하려고합니다. – Shizo

+0

@NOBANPLZGod 편집이 잘못되었습니다. 'Weapon'이 타입이라면 타입에 값을 지정하려고하기 때문에'Weapon = p2'를 할 수 없습니다. 어쨌든 요점은 다음과 같습니다. 두 포인터 유형 인 기간 사이에 변환 연산자를 도입 할 수는 없습니다. – Angew

+0

예 변수 이름을 두 번 선언하는 것을 잊어 버렸습니다. 두 번 변수 이름이 의도적으로 보이지 않게되었습니다. 또한 문자열 클래스 캐스팅에서 char *를 반환하도록 처리하므로 사용자 정의 클래스 포인터 캐스트 정의의 차이가 어디에 있어야합니다. 아직도 그 주제에 대해 더 많은 정보를 찾으려고 노력할 것 같아요. – Shizo