クラス設計についての質問です。コンパイラがこれら 2 つのクラスをどのように処理するかについて混乱しています。オブジェクト指向言語として、C++ は抽象化のファイル層または型抽象化を効率的に最適化する必要があります。私が考えることができる例はイテレータです。それらはポインターとはまったく異なるタイプですが、コンパイラーは最適化でき、たとえば for ループではポインターと同じくらい効率的です。
私が懸念しているのは、これらの 2 つのクラスが 1 つしかない場合に効率的にする方法です。2 つのクラスは、Point3 と Vector3 の数学表現です。
Point3 の操作は非常に限られていますが、数学的には、Origin から Point3 を差し引くことで Point3 から Vector3 を作成できます。Vector3 の最後を Point3 と見なすことで、反対のことを行うこともできます。
この例は、Point3 をスケーリングすることです。
Point3<float> positionStart;
Vector3<float> scale;
Point3<float> positionEnd;
positionEnd = scale * positionStart;
これにより、positionStart
Point3 が Vector3 に変換され、乗算が行われ、一時的な Vector3 の終点が に割り当てられpositionEnd
ます。
これらの変換が実際に発生しないように、これを C++ で効率的にコーディングするにはどうすればよいでしょうか。最終的に Point3 と Vector3 は 3 つの float で表されるためです。実行時にそれが Point3 か Vector3 かを判断する必要がありますが、コンパイラはプロセッサではなく型を気にする必要があります。
これが明確であることを願っています。そうでない場合は、混乱をよりよく説明しようとします。
ありがとう
**更新**質問にもう少し焦点を当てるために、これは変換コンストラクターまたは変換で行うことができます。オペレーター。中身は実は同じ。コンパイラーは、これらのコンストラクターと変換演算子をインライン化することで、谷を見て最適化することができるでしょうか。