- ベストアンサー
DirectXと自作クラスの互換について
言語:C++ OS:WindowsXP コンパイラ:VC++2008 私自身で作成したVector3クラスと、D3DXVECTOR3クラスとの互換性を作って、DirectXの関数を使用できるようにしたいと考えています。 ピンポイントの情報を見つけられませんでしたので、どのようにプログラミングをすればよいのかがわかりません。 これを知ればすぐわかるよ、と一言でもかまいません。 ご教授よろしくお願いします。 現在、コピーコンストラクタに目をつけて情報を探しています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> Vector3クラスとは、x, y, z値をfloatで持つ単純なベクトルクラスです。基本的にD3DXVECTOR3クラスと同じ働きです。 なぜ、D3DVECTORではなく、わざわざそんなクラスを作っているのか謎ですが... そこから見直した方がよいと思います。 もし、DirectXに依存するのが嫌で、抽象的なレイヤーを作りたいのであれば、質問者さんがいうところの「互換性を作る」ことは意味がないと思いますし、混乱のもとです。 また、変換コンストラクタや変換関数はトラブルの原因にもなるので、できれば避けたほうがよいでしょう。
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
> そこでまた質問なのですが、DirectXの関数をラッピングし > さも自作の関数のように扱うのはアリでしょうか? どういう意味で言われているのか分かりませんが、普通は「アリ」だと思います。
お礼
何度もありがとうございました。 方針が決まりましたので非常に助かりました。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
>Vector3クラスとは、x, y, z値をfloatで持つ単純なベクトルクラスです。 >基本的にD3DXVECTOR3クラスと同じ働きです。 中のメンバが完全に一緒じゃないか。 なら「Vector3とD3DXVECTOR3は実は同じモンだ」ってコンパイラに言えば良いだけじゃないの? Vector3クラスの宣言の代わりに typedef Vector3 D3DXVECTOR3 とか #define Vector3 D3DXVECTOR3 って書いておけば?
お礼
回答ありがとうございます。 たしかに、無理に自分で作るよりD3DXVECTOR3を利用した方が良いかもしれませんね。
補足
すみません。 実はそれだけじゃなくて、unionで配列操作も受け付けるようにしているのです。
- Tacosan
- ベストアンサー率23% (3656/15482)
型変換関数を作ったりコンストラクタを作ったりすれば何とかなるかも.
お礼
回答ありがとうございます。 ポインタを使用して、計算結果をoutしてる関数の場合はどうすれば良いのでしょう……?
- jacta
- ベストアンサー率26% (845/3158)
そのVector3クラスとやらに関して何の情報もないので、どうすることもできません。 また、 > 互換性を作って というのが何を意味しているのかも補足してください。
補足
情報が不足して、申し訳ありません。 Vector3クラスとは、x, y, z値をfloatで持つ単純なベクトルクラスです。基本的にD3DXVECTOR3クラスと同じ働きです。 D3DXVECTOR3クラスを仮引数として定義されたDirectXの便利関数を使用したいと考えています。また、同じくVector3クラスを仮引数とする自作便利関数も多数あります。 ベクトルを使用する際に、全てのD3DXVECTOR3を使用し、自作した関数群全てに、D3DXVECTOR3の引数を受け取れるようにオーバーロードを行うのは、スマートでは無いのでやりたくありません。 そこで、Vector3クラスとD3DXVECTOR3クラスどちらを渡しても、型変換が行えるようにすれば(互換と表現しました)、問題を解決できると考えました。
お礼
回答ありがとうございます。 確かに、出来るだけDirectXに依存した処理は書かないようにしています。 ですので、互換性を明示的に作る意味が無いことも分かりました。 (D3DXVec3Lengthを使ったり、自作したLengthを使ったりとなる可能性があるからです) そこでまた質問なのですが、DirectXの関数をラッピングし さも自作の関数のように扱うのはアリでしょうか?