我是C++的初学者,正在使用"C++ Primer Plus“这本书自学这门语言,并对编程变得更加自如。
我在书中做了一些与函数模板主题相关的摘录,我有两个问题。
我不明白为什么下面的显式专门化不起作用:
template <typename T>
T lesser(T a, T b)
{
return a > b ? a : b;
}
template <>
box lesser<box>(box& a, box& b)
{
return a.volume > b.volume? a : b;
}假设我有一个类型为box的结构,为什么不能将类型专门化为"box&“,而是类型为"box"?第二个声明的意思是“不要使用lesser()模板来生成函数定义,而是使用一个单独的、专门的函数”。而且,我仍然不能使用类型box&,只能使用类型box。为什么会这样呢?
编辑:好的,第二个问题自己消失了。
发布于 2012-09-08 05:14:51
模板只有一个参数- T。返回类型和参数类型需要相同。但是您的专门化通过引用获取参数,并通过值返回-这是两种不同的类型,因此模板和专门化不匹配。
https://stackoverflow.com/questions/12325407
复制相似问题