没有<>的模板方法实现

时间:2016-03-03 08:21:19

标签: c++ templates gcc c++03

我在课堂上有一个模板方法:

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行的确切含义是什么?

由于

2 个答案:

答案 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*charintint *和{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);