He estado jugando con las plantillas variadic en el nuevo estándar de C++ y se acercó con una función de mapa (+ cabeceras usando dism excluidos):C++ mapa de funciones aplicación
template<typename T>
T square(T i)
{
return i * i;
}
template <typename T, typename... Ts>
const tuple<Ts...> map(const T f, const Ts...args)
{
return make_tuple(f(args)...);
}
int main(int c, char *argv[])
{
tuple<int, int> t;
int (*fp) (int) = square;
t = map(fp, 6, 8);
cout <<get<0>(t) <<endl;
cout <<get<1>(t) <<endl;
return 0;
}
que trabaja. Siempre que todos los argumentos sean del mismo tipo para el mapa. Si cambio la principal para usar una forma ligeramente más general:
tuple<int, float> t;
t = map(square, 6, 8.0f);
gcc 4.4 informes:
In function ‘int main(int, char**)’:
error: no matching function for call to ‘map(<unresolved overloaded function type>, int, float)’
Alguna idea de cómo hacer este trabajo?
¿Está 'abusing namespace std;'? ¿De dónde viene 'tuple'? –
@KerrekSB: Dice que eliminó el 'uso de decs ', que me parece claro abuso de' uso '. –