Quiero utilizar las funciones variables de tipo seguro introducidas en C++ 11, pero no con diferentes tipos. Un ejemplo:funciones variables de tipo seguro con parámetros del mismo tipo
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));
}
El tipo de todos los parámetros son los mismos, por lo que es quizá posible escribir algo así:
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
Compila con este error en MinGW g ++ 4.5:
error: no matching function for call to 'maxv(<brace-enclosed initializer list>, <brace-enclosed initializer list>, <brace-enclosed initializer list>)'
Debido a que no saben que es de tipo {5, 6}
Point
. ¿Cuál es la solución?
Por favor s/variable/variadic/ –
Tengo que preguntar, ¿sus datos están realmente almacenados en múltiples variables no agregadas donde algo como 'max_element' no es apropiado? –
No especializas la función, pasa un predicado en su lugar. – Xeo