Aunque las respuestas anteriores son para su solución, su solución no parece ser la correcta para su problema.
Tengo dos sugerencias: 1) Crear una mejor clase base abstracta o 2) Usar una clase base para los funtores (objetos funcionales).Veamos con más detalle ...
Dado un proyecto de simular el conjunto de instrucciones de un procesador, podemos simular la ejecución con:
struct Instruction_Interface
{
virtual void execute(void) = 0;
};
typedef std::vector<Instruction_Interface *> Instruction_Container;
//...
Instruction_Container::iterator iter;
Instruction_Container program_instructions;
//...
for (iter = program_instructions.begin();
iter != program_instructions.end();
++iter)
{
(*iter)->execute(); // Execute the instruction;
}
Esto permite llamadas de método de cada instrucción execute
, independientemente de la tipo de instrucción. Uno puede agregar más métodos a la interfaz; en este ejemplo, se podría agregar "toString" que convertiría la instrucción en texto.
Idea 2: Functors
Establezca una clase base o interfaz para las funciones que desea utilizar. Colóquelos en un contenedor e itere sobre el contenedor. La iteración puede ser condicional también:
struct Functor_Interface
{
virtual std::string get_name(void) const = 0;
virtual void execute(void) = 0;
virtual void execute_if_name(const std::string& name)
{ if (name == get_name())
{
execute();
}
}
};
typedef std::vector<Functor_Interface *> Functor_Container;
//...
Functor_Container the_functors;
//...
Functor_Container::iterator iter;
for (iter = the_functors.begin();
iter != the_functors.end();
++iter)
{
(*iter)->execute_if_name("loader"); // Execute the functor if it is a *loader*.
(*iter)->execute_if_name("math");
}
En resumen, creo que por encima de su diseño para ver si hay un mejor proceso que no requiere nombres de función, sino que le permite ya sea la función de decidir ejecutar o genéricamente ejecuta ciegos métodos.
¿Qué está tratando de lograr? –