6

プラットフォーム/バージョンの違いが1つしかないライブラリを使用しています。1つのバージョンはクラスbtCollisionObjectを呼び出し、他のバージョンはそれをbtCollisionObjectWrapperと呼びます。このクラスに、そのクラスを参照する2つの名前を付けることができれば、すべての問題が解決されます。私は試しました:#define btCollisionObject btCollisionObjectWrapper;しかし、それは機能していません。クラスが定義された後、クラスに2つの名前を付ける正しい方法は何ですか?

4

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 に答える