是否可以在Objective C头文件中对名称空间内的C ++类进行前向声明?
要在Objective C中转发声明的C ++类:
namespace name
{
class Clazz
{
};
}
我知道如果C ++类不在命名空间中,我可以。取自http://www.zedkep.com/blog/index.php?/archives/247-Forward-declaring-C++-classes-in-Objective-C.html
有什么想法?
谢谢你们!
答案 0 :(得分:3)
您只需像往常一样声明它,并在C ++ {/ 1}}检查时将其包装在C和/或ObjC翻译中也包含标题:
#ifdef
由于显而易见的原因,您无法在C或ObjC翻译中使用#ifdef __cplusplus
namespace name {
class Clazz;
} // << name
#endif
,因此这非常有效。你需要在C ++翻译中使用前向声明,或者它不需要对C或ObjC可见。
答案 1 :(得分:1)
您可以在命名空间中声明一个前向类,如下所示:
namespace MyNamespace
{
class MyClass;
};
它应该在Obj-C ++中工作,但如果没有,你也可以尝试obj-c的@class
,或者只做一个typedef void* Clazz
。
答案 2 :(得分:1)
您可以在Objective-c ++标头中将您的类声明为结构,然后将它们包含在C或obj-c代码中。通常适用的相同限制也适用于此案例。唯一需要注意的是,必须在命名空间周围放置ifdef,这样在C代码中包含标头时它们就不会出现,因为C编译器不知道命名空间。
#ifdef __cplusplus
namespace name{
#endif
struct classname;
#ifdef __cplusplus
}
using namespace name;
#endif
答案 3 :(得分:0)
至少在正常的C ++中,你会做类似的事情:
namespace a {
class b;
}
int main(){
a::b *c;
}
我不能说Objective C编译器是否会接受它。