dispatch_queue_t作为C ++类中的实例变量

问题描述 投票:3回答:2

我正在尝试在(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);
    });
}

EDIT2:这是一个对我来说失败的测试项目zip 32k

c++ objective-c grand-central-dispatch objective-c++
2个回答
0
投票

添加这些行:

namespace myspace {
....
}

围绕]的实现>

Queue::....

0
投票

哇! 5年前!对于现在偶然发现此问题的任何人!

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.