下面的代碼說明的情況我遇到:命名空間和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'錯過了一個';' –