【发布时间】:2011-05-15 13:27:11
【问题描述】:
以下设计是否可行?:
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:'Container1':模板参数太少。
【问题讨论】:
-
你不能在标签上重载 doSomething 并使用省略号或通用模板来捕获所有内容吗?
-
@Tomek_没有明白你的意思,重点是模板。
标签: c++ templates explicit-specialization