下面的代码说明的情况我遇到:命名空间和C++/C混合头
#ifdef __cplusplus
namespace ns
{
class pod
{
const short foo;
const char bar;
public:
pod(short f,char b):foo(f),bar(b){}
char foobar();
};
}
#else
typedef struct pod pod;
#endif
#ifdef __cplusplus
extern "C"{
#endif
extern pod* pod_new(short f, char b);//BANG!!!
extern char pod_foobar(pod* p); //BANG!!!
#ifdef __cplusplus
}
#endif
我不能把C链接功能的命名空间ns
内,或C客户机将无法找到它们的定义。当我将它们从命名空间中取出时,C++定义将不会编译,全都是因为我从C++ FAQ Lite得知的pod
解决方案,它只是一个预处理器技巧。可悲的是,这个技巧无法处理命名空间。
我该怎么办?我是否应该抛弃所有类型安全性,并用void*
替换pod*
,或者在这种情况下是否有更好的解决方案?任何建议?请!
我想这是一个煮制的例子,但你的'typedef'错过了一个';' –