在目标 C 中向前声明命名空间的C++类
Forward declaration of a namespaced C++ class in in Objective C
是否可以在 Objective C 头文件中对命名空间内的 C++ 类进行前向声明?
C++要在目标 C 中转发声明的类:
namespace name
{
class Clazz
{
};
}
我知道如果C++类不在命名空间中,我可以。取自 http://www.zedkep.com/blog/index.php?/archives/247-Forward-declaring-C++-classes-in-Objective-C.html
有什么想法吗?
谢谢大家!
您只需像往常一样声明它,并在标头也包含在 C 和/或 ObjC 翻译中时将其包装在C++ #ifdef
检查中:
#ifdef __cplusplus
namespace name {
class Clazz;
} // << name
#endif
出于显而易见的原因,您不能在 C 或 ObjC 翻译中使用 name::Clazz
,因此这非常有效。您要么需要在C++翻译中使用前向声明,要么不需要对 C 或 ObjC 可见。
你可以在 objective-c++ 标头中将类转发声明为结构,然后将它们包含在 C 或 obj-c 代码中。 通常适用的相同限制也适用于这种情况。 唯一需要注意的是,您必须在命名空间周围放置 ifdefs,以便在 C 代码中包含标头时它们不会显示,因为 C 编译器不知道命名空间。
#ifdef __cplusplus
namespace name{
#endif
struct classname;
#ifdef __cplusplus
}
using namespace name;
#endif
您可以在命名空间中声明一个转发类,如下所示:
namespace MyNamespace
{
class MyClass;
};
它应该在 Obj-C++ 中工作,但如果不是,您也可以尝试 obj-c 的 @class
,或者只是做一个typedef void* Clazz
。
至少在正常C++中,你会做这样的事情:
namespace a {
class b;
}
int main(){
a::b *c;
}
我不能说Objective C编译器是否会接受这一点。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- 如何使用 soong 命名空间来有条件地编译模块
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何通过命名空间调用非静态方法
- 在命名空间名称之前加上 :: 是什么意思?