Я пытаюсь написать C ++ обертка вокруг Гранд-центрально-диспетчерская (GCD) очередь.
У меня так в заголовочном файле
#include <dispatch/dispatch.h>
namespace myspace {
class Queue
{
public:
Queue(dispatch_queue_t dispatchQueue);
private:
dispatch_queue_t dispatchQueue_;
}
}
Аналогом заголовка является файл .mm с реализацией.
Я импортирую Queue.h в какой-то другой чистый C ++ файл и при линковке получаю:
Undefined symbols for architecture armv7:
"myspace::Queue::Queue(dispatch_queue_s*)", referenced from:
myspace::NiceClass::CreateOneMoreQueue() in NiceClass.o
В NiceClass я создаю новую очередь:
Queue *queue = new Queue(dispatch_get_main_queue());
Я застрял с этим. Кажется, я не могу сделать это так. Я мог бы изменить dispatch_queue_t
в void*
и это работает так, но я теряю информацию о типах и получаю много кастов.
Буду признателен за любую идею.
РЕДАКТИРОВАТЬ: это реализация в Queue.mm. Управление памятью и другие детали опущены.
Queue::Queue(dispatch_queue_t dispatchQueue)
{
dispatchQueue_ = dispatchQueue;
if (dispatchQueue_ == NULL) {
dispatchQueue_ = dispatch_get_main_queue();
}
}
void Queue::AddMessage(Handler *handler, Context *context)
{
Message *msg = new Message;
msg->phandler = handler;
msg->context = context;
dispatch_async(dispatchQueue_, ^{
handler->ProcessMessage(msg);
});
}
РЕДАКТИРОВАТЬ 2: Вот тестовый проект, который потерпел неудачу для меня почтовый 32k
добавьте эти строки:
namespace myspace {
....
}
вокруг реализации
Queue::....