2017-02-02 3 views
2

내 자신의 구조체 유형이 X 인 경우 을 암시 적으로 다른 유형, 예를 들어 int*으로 변환 할 수있는 암시 적 캐스트 연산자를 정의 할 수 있습니까? 참조 간의 변환이 쉽지만 포인터에 대해 수행하는 방법을 찾을 수 없습니다. 이 같은 것은 :포인터 사이의 캐스트 연산자

struct X { 
    int theContent; 

    operator int&(){ return theContent; } 
    operator const int&() const { return theContent; } 

} 

int main(){ 
    X x; 
    X* x2=&x; 
    // this should work, but it doesn't 
    int* i=x2; 
} 
+4

나는 비슷한 질문에 이미 대답했다고 생각한다. [here] (http://stackoverflow.com/questions/6802978/implement-conversion-operator-for-pointer). 포인터는 사용자 정의 클래스 유형이 아니므로 Answer는 "no"입니다. 따라서 캐스트 연산자를 추가 할 수 없습니다. – yeputons

+0

'X *'를'int *'로 캐스팅하는 연산자가 없지만'X'에서'int &'로만 변환합니다. 'int * i = & x2-> 연산자 int를 사용하여 연산자를 명시 적으로 호출 할 수 있습니다. &();' –

+0

@SimonKraemer : 음, * 암시 적 캐스트라고하지는 않겠습니다.). – gexicide

답변

0

X는 표준 레이아웃 유형입니다. 간단히 int* i=(int*)x2; 또는 (reinterpret_cast)를 사용할 수 있습니다.

변환 정의 할 경우,

operator int*() { return &theContent; } 

그래서 당신이 할 수있는 int* i=x;처럼 어쩌면 뭔가 -

.

+0

https://godbolt.org/g/k1omz6 –

+0

@SimonKraemer 내 코드가 http://en.cppreference.com/w/cpp/language/cast_operator에서 복사되었습니다. – cshu

+0

방금 ​​추가 정보/예제를 추가하려고합니다. –