Vamos, que tenemos una funcion plantilla:¿Es posible pasar una plantilla de función como argumento de plantilla? asssume
template<typename T1, typename T2, typename T3>
T3 such_fun(T1 a, T2 b) {
// do something...
}
y ahora queremos utilizarlo como un argumento en otra plantilla, por ejemplo, como ese
template<typename T1, template<typename, typename, typename> some_function>
void big_fun(T1 a) {
// some code...
a = some_function<T1, T1, T1>(a, a);
// some code...
}
¿Es posible?
Sé que puedo usar una estructura con el operador defined(). Solo tengo curiosidad acerca de las funciones.
EDIT:
Mientras estaba escribiendo esa pregunta mi amigo encontró una solución parcial:
template<typename T1, T1 (*some_function)(T1, T1)>
void big_fun(T1 a) {
// some code...
a = some_function(a, a);
// some code...
}
Pero aún así - Soy curioso si es posible sin una materialización de un tipo de función antes llamada. Por ejemplo, es posible que desee llamar a la plantilla pasada con varias combinaciones de tipos:
template<typename T1, typename T2, template<typename, typename, typename> some_function>
void big_fun(T1 a, T2 b) {
// some code...
a = some_function<T1, T1, T1>(a, a);
a = some_function<T1, T2, T1>(a, b);
b = some_function<T2, T2, T2>(b, b);
b = some_function<T2, T1, T2>(b, a);
// some code...
}
No entiendo ni una palabra de lo que dices ... -1, ¿puedes darnos una ilustración que no sea fluida en standarese? – lurscher
@lurscher porque _no_ entiendes que es una razón horrible para rechazarlo. No renuncio a los físicos cuánticos cuando hablan de física cuántica porque no lo entiendo. –
@SethCarnegie, no estoy de acuerdo. Creo que es, en sí mismo, una muy buena razón. además, la respuesta es incorrecta también; lo que la pregunta quiere hacer es completamente posible, incluso en C++ 03.Creo que hay una desconexión entre lo que el SO pide y lo que contesta el pmr, de ahí el voto a la baja. Si mejora su respuesta, estaré más que feliz de retirarla. – lurscher