【发布时间】:2012-11-20 00:35:33
【问题描述】:
我构建了一个模板类,它应该代表一个线程本地指针。
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)
我不确定我做错了什么!
编辑:包含完整模板
【问题讨论】:
-
如果您显示的内容在类声明中,则运算符中不需要
<T>。 -
返回本身不是重点,所以像 _incomingBuffer = _outgoingBuffer = _otherBuffer;工作吗?
-
是的,但是如果您的操作符在类声明中,并且假设该类是带有模板参数
T的模板,那么您不需要在操作符的返回中使用<T>。我并不是说它会解决问题。 -
哦!无论如何,这很有帮助。谢谢。
标签: c++ templates assignment-operator