2010-03-15 3 views
4

내가 가진 말 :C++ : Vector3 type "wall"?

Position, Velocity, 

정확히 Vector3 (기본적으로, 나는 주어진 제외

typedef Vector3 Position; 
typedef Vector3 Velocity; 

을 원하는 같다 :

이제
class Vector3 { 
    float x, y, z; 
    ... bunch of cuntions .. 
    static operator+(const Vector3&, const Vector3); 
}; 

, 나는 수업을한다고 가정 :

Position position; 
Vector3 vector3; 
Velocity velocity; 

나는 다음과 같은 이 일어날 수 있는지 확인하려면 :

position + vector3; 
vector3 + velocity; 
velocity + position; 

이를 달성하는 가장 좋은 방법은 무엇입니까?

+1

단위는 원하는 것이 아니며 사소한 것은 아닙니다. 부스트에는 그런 것이있다. http://www.boost.org/doc/libs/1_42_0/doc/html/boost_units.html – GManNickG

답변

3

나는 이런 식으로 뭔가를 추천 할 것입니다 :

template<typename tag> 
class Vector3 { 
    float x, y, z; 
    ... bunch of functions .. 
    static operator+(const Vector3&, const Vector3); 
}; 

struct position_tag {}; 
struct velocity_tag {}; 
typedef Vector3<position_tag> Position; 
typedef Vector3<velocity_tag> Velocity; 

좀 더 정교한 예를 들어 여기 참조 :

1

Boost MPL이 대신 타입 정의를 사용하여, 당신은 Vector3에서 위치를 & 속도를 유도 할 수있다. 그런 다음 Vector3에서 operator +를 제거하고 위치 & Velocity에 정의하십시오.

class Vector3 { 
    float x, y, z; 
    ... bunch of cuntions .. 
}; 

class Position : public Vector3 { 
    static Position operator+(const Position&, const Position&); 
} 

class Velocity : public Vector3 { 
    static Velocity operator+(const Velocity&, const Velocity&); 
}