template<class T_POINT_TYPE>
// 3D point object
struct G_POINT
{
T_POINT_TYPE X;
T_POINT_TYPE Y;
T_POINT_TYPE Z;
G_POINT(void) : X(0), Y(0), Z(0) { /* Empty */ }
G_POINT(const G_POINT<T_POINT_TYPE> &New) : X(New.X), Y(New.Y), Z(New.Z) { /* Empty */ }
G_POINT(const T_POINT_TYPE Init_X, const T_POINT_TYPE Init_Y, const T_POINT_TYPE Init_Z) : X(Init_X), Y(Init_Y), Z(Init_Z) { /* Empty */ }
const G_POINT &operator=(const G_POINT<G_Float> &New) {X = New.X; Y = New.Y; Z = New.Z; return *this;}
const G_POINT &operator-(const G_POINT<G_Float> &Right) {X -= Right.X; Y -= Right.Y; Z -= Right.Z; return *this;}
};
struct G_TRIANGLE
{
G_POINT<G_Float> A;
G_POINT<G_Float> B;
G_POINT<G_Float> C;
};
int func(void)
{
G_POINT Point_A(4.0, 5.0, 6.0);
G_POINT Point_B(1.5, 2.5, 3.5);
G_VECTOR<G_Float> Vector_A = Point_B - Point_A;
}
int func(G_TRIANGLE &Triangle)
{
G_VECTOR<G_Float> Vector = Triangle.B - Triangle.A;
}