プラットフォーム/バージョンの違いが1つしかないライブラリを使用しています。1つのバージョンはクラスbtCollisionObjectを呼び出し、他のバージョンはそれをbtCollisionObjectWrapperと呼びます。このクラスに、そのクラスを参照する2つの名前を付けることができれば、すべての問題が解決されます。私は試しました:#define btCollisionObject btCollisionObjectWrapper;
しかし、それは機能していません。クラスが定義された後、クラスに2つの名前を付ける正しい方法は何ですか?
2 に答える
11
多分
typedef btCollisionObjectWrapper btCollisionObject;
プリプロセッサの代わりに言語ツールを使用してそれを行う方が良いです。
于 2012-12-22T23:53:02.973 に答える
7
問題を正しく理解している場合は、コンパイルしているプラットフォームを特定する方法を見つける必要があります。使用しているプラットフォームがわからないため、これについてアドバイスすることはできませんが、おそらくそうすることは可能です。マクロ経由。
あなたの問題の解決策はおそらくこのように見えるでしょう。
型宣言を使用するC++98の場合
#ifdef __PLATFORM_SPECIFIC_DEFINE
typedef btCollisionObjectWrapper btCollisionObject;
#endif
エイリアス宣言を使用するC++11では、これにはテンプレートで使用できるという追加の利点がありますが、あなたの場合は単純なtypedefで済ますことができます。
#ifdef __PLATFORM_SPECIFIC_DEFINE
using btCollisionObject = btCollisionObjectWrapper;
#endif
これにより、を使用btCollisionObject
するプラットフォームのクラス名として使用できるようになりますbtCollisionObjectWrapper
__PLATFORM_SPECIFIC_DEFINE
もちろん、を使用するプラットフォームによって定義されたマクロに置き換える必要がありますbtCollisionObjectWrapper
。
于 2012-12-23T00:14:44.697 に答える