2014-12-29 3 views
3

형식 복사본은 어떻게 만듭니 까? 예를 들어, double (또는 다른 숫자 유형)으로 암시 적으로 변환 할 수없는 Mass, AccelerationForce을 어떻게 만들지 만, 그렇지 않은 경우 모든 특성이 double입니다. 이이 기능에 대한 컴파일시 입력 유효성 검사를 허용합니다 :형식 복사본 만들기

Force GetForceNeeded(Mass m, Acceleration a); 

GetForceNeeded이 유일한 유형 MassAcceleration의 인수를 호출 할 수 있도록 보장.

class Force final 
{ 
public: 
//overload all operators 
private: 
double value; 
}; 

을하지만이 복잡 :

물론, 내가 수동 타입의 복사본을 생성하여이를 달성 할 수있다. 제네릭 솔루션이 있습니까?

+2

어쩌면 템플릿? 아니면 부스트를 사용하십시오. 유니트? –

+2

뭐라 구요? –

+0

@KerrekSB하지만 어떻게 모든 작업을 정의 할 수 있습니까? '문자열'을 위해 그것을하고 싶다고합시다. – Pradhan

답변

5

많은 해설자들이 지적했듯이 한 가지 해결책은 질문에 요청 된 모든 기능을 제공하는 BOOST_STRONG_TYPEDEF을 사용하는 것입니다. 그리고 여기에 자신의 문서에서 사용 예를 다음과 같습니다

#include <boost/serialization/strong_typedef.hpp> 


BOOST_STRONG_TYPEDEF(int, a) 
void f(int x); // (1) function to handle simple integers 
void f(a x); // (2) special function to handle integers of type a 
int main(){ 
    int x = 1; 
    a y; 
    y = x;  // other operations permitted as a is converted as necessary 
    f(x);  // chooses (1) 
    f(y);  // chooses (2) 
} typedef int a; 

는 C++ (1Y)에 불투명 형식 정의를 추가하는 proposal 있습니다.

(나는 정확한 속는 사람을 찾을 수 없기 때문에 나는이 대답을 떠납니다. 그런 경우가 아닌 경우 플래그를 바랍니다.)