2015-02-06 11 views
0

템플릿 생성자가있는 템플릿 클래스가 있고 그 생성자가 있습니다. 하지만 int에 대한 복사 생성자를 전문으로하고 그것을 할 수 없습니다. 이 프로그램은 "CC"를 인쇄합니다. 하지만 필요 : "iC" 도와주세요. 당신의 complex<int> c3(c1) 경우처럼 (다른 complex<int>에서 complex<int> 초기화) X == int템플릿 클래스 내의 템플릿 복사 생성자

#include <cstdio> 
    #include <cstdlib> 
    #include <iostream> 

    template<class X> 
    class complex 
    { 
    public: 
     complex() {} 
     template<class T> complex(const complex<T>& c) {std::cout << "2";} 
     template<class T> complex(const complex<T*>& c) {std::cout << "1"; } 
     complex(const complex<X>& c) {std::cout << "C";} 

     template<int> complex(const complex<int>& c){std::cout << "i";} 
    }; 

    int main(int argc, char *argv[]) 
    { 

     complex<int> c1; 
     complex<double> c2; 

     complex<int> c3(c1); //2 
     complex<double> c4(c2); 

    } 

답변

0

, 당신의 템플릿이 아닌 complex(const complex<int>& c)은 템플릿 전문성보다 더 나은 일치하는 것으로 간주되므로, 예상대로이 노력하고 있습니다.

유형이 일치하지 않는 complex<double> c5(c1) 줄을 따라보십시오. 이 경우 비 템플릿 생성자는 complex<double> 인수를 원하기 때문에 전문화보다 더 좋게 선택되지 않습니다.

+0

오늘은 전문화 된 새로운 수업을 추가 할 수있었습니다. '템플릿
클래스 복잡한 { 공개 : \t 착체() {} \t 템플릿 착체 (착체 CONST 및 c) {표준 : COUT << "2";} \t 템플릿 복잡한 (const complex & c) {std :: cout << "1"; } \t complex (const complex & c) {std :: cout << "Base copy con"<< std :: endl;} }; 서식 <> 클래스 복잡한 { 공개 : \t 착체() {} \t 착체 (착체 CONST 및 c) {표준 : COUT << "I"} }' –