c++ - 具有模板类的赋值运算符 - 无可接受的转换,C++

标签 c++ templates assignment-operator

我构建了一个模板类,它应该表示一个线程本地指针。

template <class T>
class ThreadLocalPointer {
    public:
        T& operator*() {
            return *_map[std::this_thread::get_id()];
        }

        T* operator->() {
            return _map[std::this_thread::get_id()];
        }
        ThreadLocalPointer<T>& operator=(const T* right) {
            _map[std::this_thread::get_id()] = right;
            return *this;
        }

        T* get() {
            return _map[std::this_thread::get_id()];
        }
    private:
        std::unordered_map<std::thread::id, T*> _map;  
};

类的实例:

ThreadLocalPointer<PacketClientHeader*> _incomingBuffer;

最后,我想在哪里使用我的赋值运算符

_incomingBuffer = (PacketClientHeader*)malloc(MAX_DATAGRAM_SIZE);

代码无法编译:

    no operator found which takes a right-hand operand of type 'PacketClientHeader *' (or there is no acceptable conversion)

我不确定我做错了什么!

编辑:包括完整模板

最佳答案

问题可能出在这里:

ThreadLocalPointer<PacketClientHeader*> _incomingBuffer;

模板参数 TPacketClientHeader*,这里:

ThreadLocalPointer<T>& operator=(const T* right) { .... }

您的运营商正在采用 const T*,它将解析为 const PacketClientHeader**。然后,您尝试从此处的 PacketClientHeader* 分配:

_incomingBuffer = (PacketClientHeader*)malloc(MAX_DATAGRAM_SIZE);

没有找到合适的操作符。在不了解该类的更多细节的情况下,很难提出解决方案,但它可以像使用一样简单

    ThreadLocalPointer<PacketClientHeader> _incomingBuffer;

或将赋值运算符声明为

ThreadLocalPointer& operator=(const T& right) { .... } 

关于c++ - 具有模板类的赋值运算符 - 无可接受的转换,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668103/

相关文章:

c++ - 如何在 C/C++ 中创建微 shell ?

templates - 如果... !true nunjucks 中的条件渲染

c++ - 在模板类中使用 r 和 l 值构造函数时出错

c++ - 什么是三法则?

c++ - 派生类继承基类赋值运算符?

c++ - 禁用复制/分配,自动禁用 child ?

c++ - 堆中分配的结果是否与堆栈中分配的结果相互依赖?

c++ - 如何实现QTextDocument序列化

c++ - 如何实例化成员函数指针?

c++ - C++11 中依赖类型的模板关键字