2016-08-11 13 views
1

私は(これはStroustrup氏によってMethod Wrapper後にモデル化されることに注意してくださいのようなクラスがあるとします。自動型変換

template<class T> 
struct Wrapper 
{ 

    private: 

    //This class is implicitly convertable to T& 
    struct TempRef 
    { 
    operator T&(); 
    T& operator()(); 
    ~TempRef(); //Executes clean up code 
    }; 
    struct TempPtr 
    { 
    T* operator T->(); 
    ~TempPtr(); //Executes clean up code 
    }; 

    public: 
    TempRef operator*(); 
    TempPtr operator->(); 

}; 

このクラスの目標は、それがTへのポインタのように動作するためのものです:

そして、それはいくつかのケースで動作します。私は、整数型のラッパーとしてそれを使用したい場合

Wrapper<thing> var; 
var->foo(); 

問題が来る:

Wrapper<int> var; 
//*var = 12; //Oops!! Does not work (no automatic conversion) 
((int&)(*var)) = 12; //Works but the syntax is a pain 
(*var)() = 12; //Good but still could be better 

そこで質問はこれです:

は整数型へのポインタと同じ整数型のラッパーとしてWrapperを使用するための構文を作成する方法はありますか、それは単に不可能です現時点では?

+0

ポインタの方がうまく動作しません。あなたは2つの異なるものをテストしています。ラップされたポインタに割り当ててみてください。 – chris

答えて

1

Wrapperに代入演算子を定義する必要があります。

Wrapper<T> &operator=(const T &v) { 
    /*something to get the T& returned by TempRef::operator T&*/ = v; 
    return *this; 
} 

このようなものは、var = 12;によって呼び出されます。

+0

はい....これは完璧です......ちょうど他のすべての演算子のために1つを作る必要があり、それは完全に動作します......もちろん、Tがその操作を持っているなら有効にします。 ..... – DarthRubik