2017-02-02 6 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

私は似たような質問は既に回答していると思います[ここ](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

私はちょっとした情報や例を追加したかっただけです –