2012-12-22 60 views
6

我正在使用一個平臺/版本之間只有一個區別的庫。一個版本調用類btCollisionObject,其他版本稱之爲btCollisionObjectWrapper。如果我可以讓這個班有兩個名字仍然參考這個班,那麼我所有的問題都將被解決。我試過:#define btCollisionObject btCollisionObjectWrapper;,但它不工作。在課程定義完成後給出兩個名字的正確方法是什麼?如何讓一個班級有兩個名字?

+9

莫非是因爲你有你的#define一個分號,其中(最有可能)不應該在那裏? –

回答

11

也許

typedef btCollisionObjectWrapper btCollisionObject; 

更好地使用語言工具,而不是預處理器做。

+0

錯誤C2371:'btCollisionObjectWrapper':重新定義;不同的基本類型 – SteveDeFacto

+0

@SteveDeFacto爲什麼你同時使用這兩個版本的庫? –

+0

@SteveDeFacto:我想你的意思是以另一種方式去做? –

7

如果我正確理解你的問題,你必須找到確定要編譯支持該平臺的一種方式,因爲我不知道你是用我不能給任何這建議該平臺但它可能是可以通過宏來做到這一點。

解決您的問題可能會看起來有點像這樣。

在C++ 98使用類型聲明

#ifdef __PLATFORM_SPECIFIC_DEFINE 
    typedef btCollisionObjectWrapper btCollisionObject; 
#endif 

在C++ 11使用別名聲明,這具有額外的優點,即它們可以與模板然而在情況下,使用你可以用一個簡單的typedef離開。

#ifdef __PLATFORM_SPECIFIC_DEFINE 
    using btCollisionObject = btCollisionObjectWrapper; 
#endif 

這將允許您使用btCollisionObject作爲類名稱爲使用btCollisionObjectWrapper

你當然會與由使用btCollisionObjectWrapper平臺中定義的宏來代替__PLATFORM_SPECIFIC_DEFINE平臺。

+1

類型別名還具有更多「類似於C++」的優點,因爲它們強調類型,而不像C語言聲明語法強調錶達式的方式那樣表達。 – bames53

+0

我想知道'typedef'和'using'語句之間的區別。你可以請我指向一個網站/無論什麼,這解釋了區別?谷歌搜索表達導致正確的結果也將做到這一點。 – leemes

+1

我不是100%的所有差異,因爲我自己並沒有真正查看它,唯一區別是[cppreference](http://en.cppreference.com/w/cpp/language/typedef)我第一次瞭解到別名聲明的地方在於它可以在創建模板的別名時使用。 – ctor

相關問題