Конструкторы копирования шаблона внутри класса шаблона

У меня есть шаблон класса, который имеет несколько конструкторов копирования шаблона, и это работает. Но я хочу специализировать конструктор копирования для 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> аргумент, не будет выбран как лучше, чем ваша специализация.

Другие вопросы по тегам