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