[英]dispatch_queue_t as instance variable in C++ class
我正在嘗試圍繞Grand-central-dispatch (GCD) 隊列編寫一個C++包裝器。
我在頭文件中有這樣的
#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
哇! 5年前! 對於現在偶然發現的任何人!
如果 myspace 是“cpp”(純 C++)文件而 Queue 是“mm”(ObjC++)文件,則在傳遞“調度”對象時,由於它們是 ObjC++ 中的 NSObjects,您將跨越語言障礙出現鏈接器故障。
將兩邊更改為“.mm”,它應該可以解決鏈接器問題。
添加這些行:
namespace myspace {
....
}
圍繞實施
Queue::....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.