2014-03-27 47 views
1

是否可以從Objective C類調用Objective-C++類和方法?從目標C類調用Objective C++方法

我們已經用Objective C代碼編寫了一個項目。現在我們有一個C++類需要集成,所以我認爲只需要將一個類更改爲與本機C++類交互的Objective C++,其他類將保留在Objective C中。 可能嗎?任何人都可以幫助我解決更好的問題嗎?

謝謝。

回答

2

是的,你可以做到這一點。只要該類的接口是C-ish,Objective-C就不在乎實現是Objective-C還是Objective-C++。

1

是的。這是可能的。只需將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代碼。

1

是的,只要您將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?