2016-08-11 5 views
1

가정하자 그래서 같은 클래스 (이 스트로브 스트 룹으로 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

포인터가 더 잘 작동하지 않습니다. 두 가지 다른 것을 테스트하고 있습니다. 랩핑 된 포인터에 할당 해보십시오. – 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

예 .... 이것은 완벽합니다 ...... 다른 모든 연산자에 대해 하나만 만들면 완벽하게 작동합니다 ... 물론 T가 해당 작업을하는 경우에만 활성화 할 수 있습니다. ..... – DarthRubik