цель c — dispatch_queue_t как переменная экземпляра в классе 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

2

Решение

добавьте эти строки:

namespace myspace {
....
}

вокруг реализации

Queue::....
0

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


По вопросам рекламы [email protected]