Extendsdevoluciones de llamada genérica
lo tanto, estoy tratando de aprender metaprogramming plantilla mejor y resolver esto es un buen ejercicio para ello.
Estoy tratando de escribir código que pueda devolver una función con cualquier cantidad de argumentos que me gusten pasarle.
// First function to call int add(int x, int y) ; // Second function to call double square(double x) ; // Third func to call void go() ;
La devolución de llamada código de creación debe ser similar:
// Write a callback object that // will be executed after 42ms for "add" Callback<int, int, int> c1 ; c1.func = add ; c1.args.push_back(2); // these are the 2 args c1.args.push_back(5); // to pass to the "add" function // when it is called Callback<double, double> c2 ; c2.func = square ; c2.args.push_back(52.2) ;
Lo que estoy pensando es decir, utilizando la plantilla metaprogramming Quiero ser capaz de declarar como devoluciones de llamada, escribir una estructura como esta (por favor, tenga en cuenta que es muy pseudocódigo)
<TEMPLATING ACTION <<ANY NUMBER OF TYPES GO HERE>> > struct Callback { double execTime ; // when to execute TYPE1 (*func)(TYPE2 a, TYPE3 b) ; void* argList ; // a stored list of arguments // to plug in when it is time to call __func__ } ;
Así que para cuando se le llama con
Callback<int, int, int> c1 ;
Automáticamente se obtendría construido para usted por < PORNO DE PLANTILLAS DE ACCIÓN > una estructura como
struct Callback { double execTime ; // when to execute int (*func)(int a, int b) ; void* argList ; // this would still be void*, // but I somehow need to remember // the types of the args.. } ;
Cualquier punteros en la dirección correcta para empezar a trabajar en la redacción de este?
Las plantillas variables son parte de C++ 0x. Un compilador que los respalde (o incluso un compilador con menos compatibilidad con C++ 0x) también incluirá objetos de función C++ 0x y 'std :: bind', que es similar a' boost :: bind' e implementa lo que eres hablando sobre. – Potatoswatter