簡體   English   中英

將NSString *傳遞給C ++參考參數

[英]Passing NSString* to a C++ reference parameter

具有Objective-C ++函數。 (文件具有正確的.mm擴展名)。

int SPGetNumericAttribute(NSMutableString* line, NSString* &attr) {...}

一些代碼調用如下:

NSString* queryAttr = nil;
int res = SPGetNameAttribute(line, queryAttr); <-- error

編譯器抱怨:

沒有匹配的函數調用“ SPGetNameAttribute”。

是否有技術原因不能將Objective-C對象傳遞給C ++參考參數? 我的猜測與ARC有關。

ARC需要知道如何處理函數內部第二個參數的引用計數。 默認情況下,該參數具有自動釋放類型。 因此,您的變量queryAttr必須具有自動釋放的ARC類型

__autoreleasing NSString* queryAttr = nil;

或者,您也可以將函數聲明為

int SPGetNumericAttribute(NSMutableString* line, NSString* __strong &attr) { ... }

對於強變量,錯誤消失了。 使用Instruments進行的測試表明,ARC似乎也正在處理此權利。 但是,您只能對此參數使用強變量。

我認為應該更好,如果使用指針代替:

int SPGetNumericAttribute(NSMutableString* line, NSString** attr) { ... }

暫無
暫無

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

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