模板类中的模板复制构造函数

时间:2015-02-06 16:35:01

标签: copy-constructor template-specialization

我有一些模板类,它有一些模板复制构造函数,并且它有效。 但我想专门为int复制构造函数而不能这样做。 该程序打印:" CC"。但需要:" iC" 请帮帮我。

    #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);

    }

1 个答案:

答案 0 :(得分:0)

使用X == int,与complex<int> c3(c1)案例(从另一个complex<int>初始化complex<int>)一样,您的非模板complex(const complex<int>& c)将被视为更好匹配比模板专业化,所以这是按预期工作。

尝试类似complex<double> c5(c1)的内容,其中类型不匹配。在这种情况下,非模板构造函数,因为它需要complex<double>参数,不会被选为优于您的专业化。