是否可以從Objective C類調用Objective-C++類和方法?從目標C類調用Objective C++方法
我們已經用Objective C代碼編寫了一個項目。現在我們有一個C++類需要集成,所以我認爲只需要將一個類更改爲與本機C++類交互的Objective C++,其他類將保留在Objective C中。 可能嗎?任何人都可以幫助我解決更好的問題嗎?
謝謝。
是否可以從Objective C類調用Objective-C++類和方法?從目標C類調用Objective C++方法
我們已經用Objective C代碼編寫了一個項目。現在我們有一個C++類需要集成,所以我認爲只需要將一個類更改爲與本機C++類交互的Objective C++,其他類將保留在Objective C中。 可能嗎?任何人都可以幫助我解決更好的問題嗎?
謝謝。
是的,你可以做到這一點。只要該類的接口是C-ish,Objective-C就不在乎實現是Objective-C還是Objective-C++。
是的。這是可能的。只需將C++字段隱藏起來即可。例如:
//.h-file
@interface IntVector: NSObject
- (int) valueAtIndex:(NSUInteger) idx;
- (NSUInteger) size;
- (void) insertValue:(int) val atIndex:(NSUInteger) idx;
@end
//.mm-file
#include <vector>
using namespace std;
@interface IntVector()
{
vector<int> _vals;
}
@end
@implementation IntVector
- (int) valueAtIndex:(NSUInteger)idx
{
return _vals[idx];
}
- (NSUInteger) size
{
return _vals.size();
}
- (void) insertValue:(int) val atIndex:(NSUInteger) idx
{
_vals.indest(_vals.begin()+idx, val);
}
@end
您將可以使用此類與任何其他Objective-C代碼。
是的,只要您將C++類型用於實現文件,就可以從常規Objective C中調用所有ObjC++類。有幾個常見問題,比如將所有導入的「鬆散」函數在'extern'C''中(就像混合C++和直C一樣),但是如果你可以假設一個適度的最新版本的Xcode(並且不需要對32位MacOS的支持),你可以很容易地完成所有的的類擴展(又名「類繼續」)。
如果您想了解有關該主題的一些技巧和竅門,我是NSBrief的情節客人前一段時間,我在長度談到使用ObjC++的幾乎每一個方面:http://nsbrief.com/113-uli-kusterer/
您也可以找到對此類似問題的回答:Can I separate C++ main function and classes from Objective-C and/or C routines at compile and link?