2012-04-11 16 views
2

Objective Cヘッダーファイルの名前空間内にあるC++クラスの前方宣言を行うことはできますか?Objective CのネームスペースC++クラスの前方宣言

namespace name 
{ 
    class Clazz 
    { 

    }; 
} 

C++クラスが名前空間に存在しない場合、私は私ができる知っている:Objective Cの中で宣言転送する

C++クラス。撮影日:http://www.zedkep.com/blog/index.php?/archives/247-Forward-declaring-C++-classes-in-Objective-C.html


ありがとうございました!私はObjective Cのコンパイラはしかしそれを受け入れるかいないかどうかと言うことはできません

namespace a { 
    class b; 
} 

int main(){ 
    a::b *c; 
} 

+0

フォワード宣言されたC++クラスはどのような用途に使用されますか?その状況で '#typedef void Clazz'を使ってください。 –

答えて

3

:明白な理由

#ifdef __cplusplus 
namespace name { 
class Clazz; 
} // << name 
#endif 

、あなたが使用することはできませんname::ClazzをCまたはObjCで翻訳しているので、これは完璧に機能します。 C++変換でフォワード宣言が必要な場合や、CまたはObjCから見える必要がない場合があります。

+1

私は__cplusplus定義について知らなかった。今はすべて明らかです。ありがとう。 – Butaca

0

少なくとも通常のC++で、あなたのような何かをしたいです。

+0

objective-cはCの純粋なスーパーセットなので、 'namespace'の識別子は認識されません – mydogisbox

1

あなたはこのような名前空間の前方クラス宣言することができます。それがobj-C++で動作するはずですが、ない場合は、また、OBJ-Cの@classを試す、または単にtypedef void* Clazzを行うことができ

namespace MyNamespace { class MyClass; };

を。

+0

あなたの回答も役に立ちました。ありがとう! – Butaca

1

あなたのクラスを構造体としてobjective-C++ヘッダーで宣言してから、Cまたはobj-cコードに含めることができます。この場合も、通常適用されるのと同じ制限が適用されます。唯一の注意点は、Cコンパイラが名前空間について知らないので、Cコードにヘッダを含めるときに表示されないように、名前空間の周りにifdefを置く必要があることです。あなたはいつものようにそれを宣言し、ヘッダもCおよび/またはにObjC翻訳に含まれているC++ #ifdefチェックでラップ

#ifdef __cplusplus 
namespace name{ 
#endif 
    struct classname; 
#ifdef __cplusplus 
} 
using namespace name; 
#endif 
+0

あなたの回答も役に立ちました。ありがとう! – Butaca

関連する問題