如何在 cpp 中使用范围解析运算符创建专业化模板

How to create specialization template using scope resolution operator in cpp

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;
}

问题是最后一段代码。 编译错误 ->错误:'int Temp::increment()' 的模板 ID 'increment<>' 不匹配任何模板声明

您不必将 template<> 与专门的成员函数一起使用,因为编译器知道您正在为 int 类型专门化 Temp。所以一个空模板<>给出了错误。

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

template是用来告诉编译器T是template param,仅此而已。但在您的情况下,您专攻 int 类型,因此您不必指定模板 <>。 template<> 仅适用于 class 而不适用于在 class.

之外定义的成员函数