我在课堂上有一个模板方法:
template<class T>
A& doSomething(T value)
然后我有一个实现
template<class T>
A& A::doSomething(T value){
// do something with value
return *this;
}
然后,我有一个专业化,让我们说bool
template<>
A& A::doSomething(bool value){
// do something special with value of type bool
return *this
}
这就是我的理解,现在在代码中有类似的东西,我不知道是什么意思:
template A& A::doSomething(char const*);
template A& A::doSomething(char);
template A& A::doSomething(int);
template A& A::doSomething(int*);
template A& A::doSomething(double);
...
带模板的最后5行的确切含义是什么?
由于
答案 0 :(得分:5)
它是Explicit instantiation,它强制使用指定的模板参数实例化模板,并阻止它们的隐式实例化。
显式实例化定义强制实例化 他们所指的功能或成员功能。它可能出现在 在模板定义之后的任何地方编程,并为给定的程序 argument-list,只允许在程序中出现一次。
显式实例化声明(extern模板)阻止 隐式实例化:否则会导致的代码 隐式实例化必须使用显式实例化 定义在程序的其他地方提供。
请参阅Explicit instantiation - when is it used?
因为您标记了c ++ 03,请注意链接页面中提到的 if (bin[0]!=null && bin[0].equalsIgnoreCase("1")) {
zero.setBackgroundResource(R.drawable.onn);
}
else {
zero.setBackgroundResource(R.drawable.off);
}
是从c ++ 11引入的。
答案 1 :(得分:2)
此行不是实现。对doSomething
类型char const*
,char
,int
,int *
和{double
的{{1}}编译器只能说“创建”代码{1}}
template A& A::doSomething(char const*);
template A& A::doSomething(char);
template A& A::doSomething(int);
template A& A::doSomething(int*);
template A& A::doSomething(double);