我构建了一个模板类,它应该表示一个线程本地指针。
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;
模板参数 T
是 PacketClientHeader*
,这里:
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/