可以进行以下设计吗?:

template <typename T>
class Test{
 public:
  template <typename Z>
  void doSomething();
  //rest of things
 private:
  T obj;
  //some things
};

现在,如果可能的话,我将对doSomething做一些明确的专门化,以便最后我将具有以下类似的版本:
void doSomething<int>(){
 //do something
}
void doSomething<double>(){
 //do something
}
...etc

这似乎是不可能的,因为我找不到任何语法来完成这项工作,于是我想也许设计应该如下所示,以便所有模板参数都应传递给模板类本身:
template <typename T,typename Z>
class Test{
 public:
  void doSomething();
  //rest of things
 private:
  T obj;
  //some things
};

然后,我尝试了甚至无法编译的部分特化:
template <typename T>
void Test<T,int>::doSomething(){
 //do something
}
template <typename T>
void Test<T,double>::doSomething(){
 //do something
}
...etc

对于显式特化,出现以下错误:
错误#1:模板模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数。
错误#2:“容器1”:模板参数太少。

最佳答案

为了显式专门化doSomething,您还必须显式专门化Test

从14.7.3/18开始:

关于c++ - 我应该如何进行这种显式特化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4274828/

10-10 04:22