自动类型转换
Automatic type conversion
假设我有一个像这样的 class(请注意,这是根据 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->();
};
此 class 的目标是使其充当指向 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
作为整数类型的包装器的语法与指向整数类型的指针相同,还是目前根本不可能?
您需要在Wrapper
中定义一个赋值运算符。像
Wrapper<T> &operator=(const T &v) {
/*something to get the T& returned by TempRef::operator T&*/ = v;
return *this;
}
这将由 var = 12;
调用。
假设我有一个像这样的 class(请注意,这是根据 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->();
};
此 class 的目标是使其充当指向 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
作为整数类型的包装器的语法与指向整数类型的指针相同,还是目前根本不可能?
您需要在Wrapper
中定义一个赋值运算符。像
Wrapper<T> &operator=(const T &v) {
/*something to get the T& returned by TempRef::operator T&*/ = v;
return *this;
}
这将由 var = 12;
调用。