2017-01-29 1 views
0

같은 유형의 클래스 T1의 객체를 인수로 취하고 T 유형의 객체를 만드는 내 클래스의 생성자를 생성해야합니다.<T1> 유형의 객체를 생성하는 생성자

컴파일러는 변환 T1 -> T을 수행 할 수 있는지 여부를 결정하는 사람입니다.

예를 : 나는

Object<int> o; 
Object<double> o1(o); 

은 정밀도를 잃지 않기 때문에이 작동합니다

이있는 경우. 다른 방법으로는 작동하지 않아야합니다 (정수형 객체에서 double 값 복사). 다른 사람이 도와 줄 수 있습니까/나에게이 방법을 알려주시겠습니까?

+0

실제 문제 는요? 정밀도를 잃어 버렸는지 정확하게 판단 할 것인가? 정수가 아닌 유형에 대한 정밀도는 어떻게 정의합니까? –

+0

부동 소수점에서 적분으로의 변환과 같은 경우는 클래스에 의해 처리되는 것이 아니라 사용자에 의해 처리되어야합니다. 당신이 그것을하고 싶다면 허용됩니다. – DeiDei

+0

내 일반적인 문제는 : 나는 vale가 저장된 인덱스 (int row int col)와 템플릿 값 (배열에 추가 할 실제 값)이있는 2 차원 배열 클래스를 구현하고있다. 이 유형의 기존 배열에서 유형 T의 배열을 만들어야합니다.이 문제의 텍스트는 다음과 같습니다. 컴파일러에 캐스팅 컨트롤 (U -> T) – user7337963

답변

4

템플릿 복사 생성자는 어떻습니까?

template<typename T> 
class Object 
{ 
    template<typename U> 
    Object(const Object<U>& rhs) 
     : val(rhs.val()) // initialize appropirate members 
    { 
     // here you can assert what types U can be 
     static_assert(!(std::is_integral<T>::value && 
         std::is_floating_point<U>::value), 
        "Can't construct Object<Integral> with Object<FloatingPoint>"); 
    } 
}; 
+0

응답 해 주셔서 감사합니다. 처음에는 이런 식으로 생각했습니다. 그러나 나는 그것을 작동시킬 수 없다. 내 클래스는 struct struct (int i; int j; T val) 템플릿을 기반으로하며, 클래스는 다음과 같이 선언됩니다. structName * arr; – user7337963

+0

질문에 관련 정보를 모두 게시해야 고려할 수 있습니다. – DeiDei

+0

네, 죄송합니다. – user7337963

관련 문제