Оператор присваивания с шаблонными классами — нет приемлемого преобразования, переполнение стека

Я создаю шаблонный класс, который должен представлять локальный указатель потока.

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)

Я не уверен, что я делаю неправильно!

Изменить: включен полный шаблон

0

Решение

Проблема может быть в том, что здесь:

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) { .... }
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector