下面的代码解释了我遇到的情况:
#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 链接函数放在 namespacens
中,否则 C 客户端将找不到它们的定义。当我将它们拉出命名空间时,C++ 定义也不会编译,这都是因为pod
我从C++ FAQ Lite中学到的解决方案,它只是一个预处理器技巧。可悲的是,这个技巧无法处理命名空间。
我应该做些什么?我应该抛弃所有类型安全,并用 替换pod*
,void*
还是有更好的解决方案来解决这种情况?有什么建议吗?请!