不知下面的解決方法是可行的,哪些可以在編譯器級的最深影響後。
// foo.h
typedef struct foo
{
int i;
#ifdef __cplusplus
foo(int _i) : i(_i) {};
#endif
} foo;
// bar.c
#include "foo.h"
foo bar;
bar.i = 1;
// bar.cpp
#include "foo.h"
foo bar(2);
在我看來是一個偉大的伎倆利用「結構多態性」,能夠保持便攜性爲C遺留代碼,但我的感覺是,在某些方面,我現在做兩份不同類型。
你也在使用兩種不同的語言......你想達到什麼目的? –
如果使用C編譯器進行編譯,則在結構中沒有C++函數。如果使用C++編譯器編譯,則沒有C結構。是的,你有兩種完全不同的類型。 – Gerhardh
環境是一個自己的C++ 11庫,它依賴於舊的C89庫在其他庫中。我的一些c文件是這個lib的客戶端,並且是C11編譯的;該示例結構將主要在我的庫上共享,並且我想確保它是*完全相同的類型。 –