Как сделать шаблонный класс. внутри динамической библиотеки?
Есть некий шаблонный класс, вот он:
template <typename T>
class COMMON_LIBRARY_EXPORT ThreadQueue : public std::queue<T>
{
public:
ThreadQueue(const T& t) = delete;
ThreadQueue()
{
_ignore_condition = false;
_queue_mutex = new QMutex();
_queue_condition = new QWaitCondition();
}
ThreadQueue<T>& operator=(const ThreadQueue<T>& thread_queue) = delete;
virtual ~ThreadQueue()
{
delete _queue_condition;
delete _queue_mutex;
}
virtual T dequeue()
{
QMutexLocker lock(_queue_mutex);
if (!_ignore_condition && this->empty())
_queue_condition->wait(_queue_mutex);
_queue_condition->wakeAll();
if (_ignore_condition && this->empty())
return nullptr;
auto tmp = this->front();
this->pop();
return tmp;
}
void enqueue(T&& t)
{
QMutexLocker lock(_queue_mutex);
if (!_ignore_condition && this->size() >= QUEUE_DEPTH)
_queue_condition->wait(_queue_mutex);
_queue_condition->wakeOne();
this->push(std::forward<T>(t));
}
void ignoreWaitCondition()
{
QMutexLocker lock(_queue_mutex);
_ignore_condition = true;
_queue_condition->wakeAll();
}
protected:
QMutex* _queue_mutex;
QWaitCondition* _queue_condition;
bool _ignore_condition;
};
Хотел сделать его внутри динамической библиотеки. Но Получается ошибка линковки, что не удивительно, потому что скомпилироваться - скомпилировался, но реализации. для данного класса у меня нету. Как побороть?? Написать в этом же классе
template class ThreadQueue<MyClass>;
не получится, ибо я не знаю что такое MyClass
Пробовал внутрт, где используется этот класс написать template class ThreadQueue; но видать я то то делаю не так. и получаю ошибку линковки такого рода:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка LNK2019 ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __cdecl ThreadQueue<class CompressedFrame *>::ThreadQueue<class CompressedFrame *>(void)" (__imp_??0?$ThreadQueue@PEAVCompressedFrame@@@@QEAA@XZ) в функции "public: void __cdecl ThreadQueue<class CompressedFrame *>::`local vftable constructor closure'(void)" (??_T?$ThreadQueue@PEAVCompressedFrame@@@@QEAAXXZ).