Конструкторы копирования шаблона внутри класса шаблона
У меня есть шаблон класса, который имеет несколько конструкторов копирования шаблона, и это работает. Но я хочу специализировать конструктор копирования для 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 ответ
С X == int
, как в вашем complex<int> c3(c1)
случай (инициализация complex<int>
От другого complex<int>
), ваш не шаблон complex(const complex<int>& c)
будет считаться лучшим соответствием, чем ваша специализация шаблона, так что это работает как ожидалось.
Попробуйте что-то вроде complex<double> c5(c1)
где типы не совпадают. В этом случае, не шаблонный конструктор, так как он хотел бы complex<double>
аргумент, не будет выбран как лучше, чем ваша специализация.