5
我想使用C++ 11中引入的類型安全可變參數函數,但不適用於不同的類型。 A實施例:具有相同類型參數的類型安全可變參數函數
template<typename T>
T maxv(T first, T second) {
return first > second ? first : second;
}
template<typename T, typename ... Rest>
T maxv(T first, T second, T ... rest) {
return maxv(first, maxv(second, rest));
}
類型的所有參數都是相同的,所以它是也許可能寫出類似的東西:
struct Point { int x,y; };
template<>
Point maxv(Point first, Point second) {
return first.x > second.x ? first : second;
}
maxv({1, 2}, {3, 4}); // no problem
maxv({1, 2}, {3, 4}, {5, 6}); // compile error
它編譯與此錯誤在mingw的克++ 4.5:
error: no matching function for call to 'maxv(<brace-enclosed initializer list>, <brace-enclosed initializer list>, <brace-enclosed initializer list>)'
因爲他不知道{5, 6}
是Point
類型。解決辦法是什麼?
請問/ var/variadic/ – 2012-03-23 17:31:52
我不得不問,你的數據真的存儲在多個非聚合變量中,像max_element這樣的東西不合適嗎? – 2012-03-23 17:51:09
不要專門的功能,而是傳遞一個謂詞。 – Xeo 2012-03-23 18:04:20