在 C++ 智能指针实现中调用 "operator T()"

invoking "operator T()" in c++ smart pointer implementation

我正在使用一些包含以下运算符的智能指针实现:

template<class T>
class my_unique_ptr {
public:
    ...

    operator T() {
        return _t;
    }

    T *operator &() {
        return &_t;
    }

private:
    T _t;
};

我希望从指针 class 包装的类型 T 中获取原始值。

& 运算符工作正常,但它给出了我的指针而不是值本身。

因此,我希望调用 T() 运算符(就像 std::unique_ptr 中的 get()

我试图直接使用该变量,但它引用的是 my_unique_ptr<T> 而不是 T

void func(myClass c);

int main()
{
     my_unique_ptr<myClass> x = new myClass(..);
     func(x); 
}

但我收到无法从类型 'my_unique_ptr' 转换为指针类型 'myClass'

的错误

如何呼叫这个接线员?

How can I call this operator ?

当您在对象上使用 & 时,将调用该函数。

 my_unique_ptr<myClass> x = new myClass(..);
 auto ptr = &x;

此处,ptr 的类型为 myClass*。能够使用

 func(x); 

您必须定义一个转换运算符。

operator T&() {
    return _t;
}