Estoy trabajando en una herramienta de transliteración. Tengo dos módulos, lexer y traductor. Lexer genera tokens fuera del texto de entrada. Dependiendo del idioma actual elegido, debo llamar a la rutina de traducción adecuada.Ejecutando funciones dependiendo del valor de una variable - C++
He tenido algunas ideas para hacer esto. El primero es crear una clase base llamada base_translator
y proporcionar el método virtual (translate()
) que todos los traductores tienen que anular. Ahora cree una fábrica translator_factory
y llame al create()
con el nombre del idioma. Esta fábrica devolverá la instancia apropiada.
Pero esto parece ser una sobreingeniería. Así que se me ocurrió otro enfoque en el que tengo una estructura como la siguiente.
struct translator
{
const char* name;
void (*fp)();
};
Que solo conserva el nombre de un idioma y un puntero a la función que puede procesarlo. El uso será,
static translator translators[] = {
{"first", first},
{"second", second}
};
const char* language = /* */;
for(int i = 0; i < 2; i++) {
translator *t = translators + i;
if(strcmp(t->name, language) == 0) {
t->fp();
break;
}
}
Este enfoque es muy simple y fácil de mantener. Pero me pregunto, ¿este es el mejor enfoque para el problema? ¿Tienes alguna sugerencia para mejorar esto?
Cualquier ayuda sería genial.
Su segundo enfoque simplemente emula el polimorfismo en tiempo de ejecución de C++ (funciones virtuales) en estilo C. No tiene ninguna ventaja sobre el soporte integrado para OOP en C++. –