【发布时间】:2021-04-07 19:10:15
【问题描述】:
我正在尝试创建一个小型包装类,让我可以使用指向类似指针的指针 它只是一个普通的指针(只是为了方便)。 我想出了以下代码:
template<typename T>
class PtrPtr
{
public:
PtrPtr() = default;
PtrPtr(const T** ptr) : m_ptr(ptr) { }
inline void operator =(const T** ptr) { m_ptr = ptr; }
inline void operator =(T** ptr) { m_ptr = ptr; }
inline operator T*() const { return (*m_ptr); }
inline T** get() const { return m_ptr; }
private:
T** m_ptr;
};
我认为运营商 inline operator T*() const { return (*m_ptr); } 会
可以像使用指向 T 的指针一样使用该类,但它似乎不起作用
当我尝试使用以下语法访问 T 的元素时:
PtrPtr<myStruct> ptr = function that returns a pointer to pointer to myStruct;
ptr->some member of myStruct; <-Gives an error
static_cast<myStruct*>(ptr)->some member of myStruct; <-works but obviously tedious syntax
请注意,当我专门将“PtrPtr ptr”转换为 T* 然后尝试访问它时 带有“->”-操作符的成员似乎可以工作。 如果可以在这里实现干净的语法有什么想法吗?
【问题讨论】:
-
->是一个运算符,所以你也需要重载它 -
非常感谢,它工作得很好,正是我想要的。
标签: c++ templates operator-overloading