あなたのポイントはベクトルとして保存されている場合、あなたは次元数を指定しますint
パラメータを持つテンプレートクラスとして、あなたの3Dと2Dのポイントクラスを定義することができます。
template<int dimensions> class Point {
vector<int> coords;
Point() : coords(dimensions) {}
....
template<int other_dimensions> convertToPoint() const
{
// Handle different options here like:
// dimensions > other_dimensions
// dimensions < other_dimensions
// et cetera
}
};
をポイントクラスをインスタンス化します。
typedef Point<2> Point2D;
typedef Point<3> Point3D;
Point2D pt = Point3D(1, 2, 3).convertToPoint<2>(); // Point2D(1, 2);
Point3D pt = Point2D(4, 5).convertToPoint<2>(); // Point3D(4, 5, 0);
を
このようにすれば、ロジックは同じだが完全に異なるタイプと簡単なコンバージョンが得られます。言い換えれば、の1つだけをクラスと2つの別々のクラスの代わりに定義する必要があります。
出典
2013-03-18 13:03:51
umi
hm、ここで見てみたいです(ヒント: 'explicit'):-) http://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-in-c-mean – Najzero
「メモリ内のインプレース」変換の例を教えてください。先験的に、私は、2Dの3Dポイント間の任意の公開継承は不自然で混乱しているように思う。 – juanchopanza
共通の基底クラスが、3Dポイントを2Dポイントに変換する方法を、どうにかすることはできません。 「B」が「2Dpoint」と「3Dpoint」の両方の基底であり、「x」と「y」の座標が「B」に格納されているとします。さらに、 '3Dpoint'のインスタンスがあり、何もコピーせずに' 2Dpoint'のインスタンスが必要であるとします。次は何? –