我该怎么做这个明确的专业化?

Poo*_*ria 6 c++ templates explicit-specialization

以下设计可能吗?:

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

现在,如果可能的话,我会为doSomething做一些明确的专业化,以便最后我会有一些版本如下:

void doSomething<int>(){
 //do something
}
void doSomething<double>(){
 //do something
}
...etc
Run Code Online (Sandbox Code Playgroud)

这似乎不可能我找不到任何语法来完成这项工作然后我想也许设计应该如下所示,以便所有模板参数应该传递给模板类本身:

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

然后我尝试了部分特化,甚至没有编译:

template <typename T>
void Test<T,int>::doSomething(){
 //do something
}
template <typename T>
void Test<T,double>::doSomething(){
 //do something
}
...etc
Run Code Online (Sandbox Code Playgroud)

我为显式特化得到了以下错误:
错误#1:类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数.
错误#2:'Container1':模板参数太少.

ice*_*ime 6

为了明确专门化,doSomething您还必须明确专门化Test.

从14.7.3/18:

在类模板成员或出现在命名空间作用域中的成员模板的显式特化声明中,成员模板及其某些封闭类模板可能保持非专业化,除非声明不应明确专门化类成员模板封闭类模板也没有明确专门化.