Как создать шаблон специализации с помощью оператора разрешения области видимости в cpp - PullRequest
0 голосов
/ 05 мая 2020
template<class t> class Temp{
    static t x;
    public:
      Temp(){};
      t increment();
      ~Temp(){/*body of destructor is important.*/};
};

template<class t>t Temp<t>::x;

template<class t> t Temp<t>::increment(){
    return ++x;
}

/*Template specialization starts.*/
template<>class Temp<int>{
    int x;
    public:
      Temp():x(0){};
      int increment();
      ~Temp(){};
};
/*Below is the error part.*/
template<>int Temp<int>::increment(){
    return 0;
}

Проблема в последнем блоке кода. Ошибка компиляции -> ошибка: идентификатор шаблона 'increment <>' для 'int Temp :: increment ()' не соответствует никакому объявлению шаблона

1 Ответ

0 голосов
/ 05 мая 2020

Вам не нужно использовать template <> со специализированной функцией-членом, потому что компилятор знает, что вы специализируете Temp для типа int. Таким образом, пустой шаблон <> выдает ошибку.

int Temp<int>::increment() {
  return ++x;
}

шаблон используется, чтобы сообщить компилятору, что T является параметром шаблона, вот и все. Но в вашем случае вы специализируетесь на типе int, поэтому вам не нужно указывать template <>. template <> применим только для класса, а не для функций-членов, определяющих вне класса.

...