簡體   English   中英

dispatch_queue_t 作為 C++ 類中的實例變量

[英]dispatch_queue_t as instance variable in C++ class

我正在嘗試圍繞 (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

哇! 5年前! 對於現在偶然發現的任何人!

如果 myspace 是“cpp”(純 C++)文件而 Queue 是“mm”(ObjC++)文件,則在傳遞“調度”對象時,由於它們是 ObjC++ 中的 NSObjects,您將跨越語言障礙出現鏈接器故障。

將兩邊更改為“.mm”,它應該可以解決鏈接器問題。

添加這些行:

namespace myspace {
....
}

圍繞實施

Queue::....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM