3
假设我有任意的模板的方法,其可以通过常引用(显然因此,用于琐碎类型和对象)接收参数由值和。模板参数++
编写模板函数原型时如何处理这种情况?
我能做出这样的:
template <typename T> void Foo(T value) {
// Do something.
}
template <typename T> void Foo(const T& value) {
// Do something, yeah.
}
// Specialization for first prototype.
template <> void Foo<int>(int value) { }
// Specialization for second prototype.
template <> void Foo<Object>(const Object& value) { }
但这种方法只适用于琐碎的功能,即充当纯粹至于其它的一些调用的封装好。
如果函数(非模板版本)里面有很多代码,这意味着我必须复制代码两次。
我可以在这里做些更聪明的事吗?
有一个疑问。如果我有像void foo(const complex&obj1)这样的东西,并且我将它称为foo(2),会发生什么? (假设我有int类型的复制构造函数。) – 2010-10-12 14:28:01
@Manoj:然后创建一个临时的'complex'对象(用'2'初始化)并传递给函数。这个临时的直到包含函数调用的表达式结束。 – 2010-10-12 14:31:49
@Manoj:与非常量引用不同,const引用可以绑定到右值,所以不用担心 – 2010-10-12 14:39:11