2010-10-23 62 views
4

是否有可能有一個目標C成員在C++類目標C++成員類

@interface ObjectiveCClass : UIViewController { 

    int someVarialbe; 

} 
- (void)someFunction; 

@end 


class CPlusPlusClass{ 
     ObjectiveCClass obj;   // have a objective c member 

     void doSomething(){ 
      obj.someFunction;  // and call a objective c method 
     } 
}; 

任何指導,將真正理解。

乾杯

回答

6

要創建可以OBJ-c和cpp的代碼之間共享的頭文件,你可以使用編譯器預定義宏做這樣的事情:

// A .h file defining a objc class and a paired cpp class 
// The implementation for both the objective C class and CPP class 
// MUST be in a paired .mm file 
#pragma once 

#ifdef __OBJC__ 
#import <CoreFoundation/CoreFoundation.h> 
#else 
#include <objc/objc.h> 
#endif 

#ifdef __OBJC__ 

@interface ObjectiveCClass : 
... 

typedef ObjectiveCClass* ObjectiveCClassRef; 

#else 

typedef id ObjectiveCClassRef; 

#endif 

#ifdef __cplusplus 

class CPlusPlusClass { 
    ObjectiveCClassRef obj; 

    void doSomethind(); 
}; 

#endif 

我不是100%肯定它合法的讓ObjectiveClassRef在c/cpp和obj-c構建之間改變類型。 但是id是在目標C頭文件中定義的c/cpp兼容類型,能夠存儲目標C類指針,並且在.m或.mm文件中使用時,允許您使用客觀C語法直接調用該對象。

+0

當我加入 的#include 「ObjectiveCClass.h」 到C++文件我得到9000級的錯誤,如:前 預計不合格-ID ' - ' 令牌 和 流浪程序中的'@' – user346443 2010-10-23 19:04:03

+1

頭文件將要在.cc/.cpp和/ mm文件之間共享的文件需要進行清理。您不能在這樣的頭文件中使用任何Objective-Cs @指令。 – 2010-10-23 19:11:16

+0

那麼,一個objective-c類應該是什麼樣子,所以我可以在C++類中擁有它的成員。謝謝你的幫助。 – user346443 2010-10-23 19:14:21

2

有Objective-C的方言叫的Objective-C++是用C++相同的方式互操作是Objective-C的是與C可互操作的,您可以更改設置的文件是客觀的,C++或改擴建到「.mm」。您仍然需要通過指針訪問Objective-C對象,並且執行alloc-init跳舞以及所有這些。