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