2012-04-11 5 views
2

Ist es möglich, Forward-Deklaration einer C++ - Klasse, die sich in einem Namespace befindet, in einer Objective-C-Header-Datei zu tun?Vorwärtsdeklaration einer Namespace C++ - Klasse in Objective C

C++ Klasse weiterleiten in Objective C erklären:

namespace name 
{ 
    class Clazz 
    { 

    }; 
} 

Ich weiß, ich kann, wenn die C++ Klasse nicht in einem Namespace ist. Genommen von http://www.zedkep.com/blog/index.php?/archives/247-Forward-declaring-C++-classes-in-Objective-C.html

Irgendwelche Gedanken?
Danke Jungs!

+0

Was ist eine forward deklarierte C++ - Klasse? Verwenden Sie einfach eine '#typedef void Clazz 'in dieser Situation. –

Antwort

3

Sie erklären, nur es wie üblich, und wickeln Sie es in der C++ #ifdef Prüfung wenn der Header auch in C und/oder ObjC Übersetzungen enthalten ist:

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

Aus offensichtlichen Gründen Sie nicht verwenden können name::Clazz in einer C oder ObjC Übersetzung, so funktioniert das perfekt. Entweder benötigen Sie die Vorwärtsdeklaration in der C++ - Übersetzung, oder sie muss nicht für C oder ObjC sichtbar sein.

+1

Ich wusste nichts über die Definition von __cplusplus. Es ist jetzt alles klar. Vielen Dank. – Butaca

0

zumindest in normalen C++, würden Sie so etwas wie:

namespace a { 
    class b; 
} 

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

ich nicht, ob die Objective-C-Compiler obwohl akzeptieren kann sagen, dass oder nicht.

+0

objective-c ist eine reine Obermenge von C, so dass es den 'namespace' Identifier nicht erkennt – mydogisbox

1

Sie können eine Vorwärts-Klasse in einem Namespace wie folgt erklären:

namespace MyNamespace { class MyClass; };

Es sollte in Obj-C++ arbeiten, aber wenn du nicht auch obj-c des @class versuchen könnte, oder einfach eine typedef void* Clazz .

+0

Ihre Antwort war auch nützlich. Vielen Dank! – Butaca

1

Sie können Ihre Klasse in Ihren objective-C++ - Headern als Struktur deklarieren und sie dann in C- oder obj-c-Code einschließen. Die gleichen Einschränkungen, die normalerweise gelten, gelten auch für diesen Fall. Der einzige Nachteil ist, dass Sie ifdefs um den Namespace legen müssen, damit sie nicht angezeigt werden, wenn Sie Ihren Header in C-Code einfügen, da der C-Compiler keine Namespaces kennt.

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

Ihre Antwort war auch nützlich. Vielen Dank! – Butaca