2

名前空間内にあるC++クラスの前方宣言をObjectiveCヘッダーファイルで行うことは可能ですか?

ObjectiveCで前方宣言するC++クラス:

namespace name
{
    class Clazz
    {

    };
}

C++クラスが名前空間にない場合は可能です。http://www.zedkep.com/blog/index.php?/archives/247-Forward-declaring-C++-classes-in-Objective-C.htmlから取得

何かご意見は?
みんなありがとう!

4

4 に答える 4

5

通常どおりに宣言し#ifdef、ヘッダーが C および/または ObjC 翻訳にも含まれている場合は C++ チェックでラップします。

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

name::Clazz明らかな理由から、 C または ObjC の翻訳では使用できないため、これは完全に機能します。C++ 変換で前方宣言が必要か、C または ObjC から見える必要がないかのいずれかです。

于 2012-04-11T04:58:35.023 に答える
2

クラスを object-c++ ヘッダーで構造体として前方宣言し、それらを C または obj-c コードに含めることができます。この場合にも、通常適用されるのと同じ制限が適用されます。唯一の注意点は、名前空間の周りに ifdef を配置する必要があることです。これにより、C コンパイラは名前空間を認識しないため、ヘッダーを C コードに含めるときに表示されなくなります。

#ifdef __cplusplus
namespace name{
#endif
    struct classname;
#ifdef __cplusplus
}
using namespace name;
#endif
于 2012-04-11T04:51:21.757 に答える
1

次のように、名前空間で forward クラスを宣言できます。

namespace MyNamespace { class MyClass; };

Obj-C++ で動作するはずですが、そうでない場合は、obj-c を試す@classか、typedef void* Clazz.

于 2012-04-11T02:00:00.930 に答える
0

少なくとも通常の C++ では、次のようにします。

namespace a {
    class b;
}

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

ただし、Objective C コンパイラがそれを受け入れるかどうかはわかりません。

于 2012-04-11T02:00:00.713 に答える