自动类型转换

时间:2016-08-11 01:08:49

标签: c++ proxy wrapper

假设我有一个这样的类(请注意,这是在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作为整数类型的包装器的语法与指向整数类型的指针相同,或者目前只是不可能?

1 个答案:

答案 0 :(得分:1)

您需要在Wrapper中定义赋值运算符。像

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

然后由var = 12;调用。