我有一些模板类,它有一些模板复制构造函数,并且它有效。 但我想专门为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);
}
答案 0 :(得分:0)
使用X == int
,与complex<int> c3(c1)
案例(从另一个complex<int>
初始化complex<int>
)一样,您的非模板complex(const complex<int>& c)
将被视为更好匹配比模板专业化,所以这是按预期工作。
尝试类似complex<double> c5(c1)
的内容,其中类型不匹配。在这种情况下,非模板构造函数,因为它需要complex<double>
参数,不会被选为优于您的专业化。