スレッド ローカル ポインターを表すテンプレート クラスを作成します。
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)
何が間違っているのかわからない!
編集:完全なテンプレートが含まれています