Ich arbeite an einem Transliterationswerkzeug. Ich habe zwei Module lexer und Übersetzer. Lexer generiert Token aus dem Eingabetext. Abhängig von der gewählten Sprache muss ich die entsprechende Übersetzungsroutine aufrufen.Ausführen von Funktionen abhängig vom Wert einer Variablen - C++
Ich habe ein paar Ideen, um dies zu tun. Die erste besteht darin, eine Basisklasse namens base_translator
zu erstellen und eine virtuelle Methode (translate()
) bereitzustellen, die jeder Übersetzer überschreiben muss. Erstellen Sie jetzt eine Factory translator_factory
und rufen Sie create()
mit dem Sprachennamen auf. Diese Fabrik wird die entsprechende Instanz zurückgeben.
Aber das scheint über Engineering zu sein. Also habe ich einen anderen Ansatz gefunden, bei dem ich eine Struktur wie die folgende habe.
struct translator
{
const char* name;
void (*fp)();
};
Welche nur einen Sprachnamen und einen Funktionszeiger behält, der es verarbeiten kann. Verwendung wird sein,
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;
}
}
Dieser Ansatz ist sehr einfach und leicht zu pflegen. Aber ich frage mich, ist dies der beste Ansatz für das Problem? Hast du irgendwelche Vorschläge, um das besser zu machen?
Jede Hilfe wäre großartig.
Ihr zweiter Ansatz emuliert lediglich den C++ - Laufzeitpolymorphismus (virtuelle Funktionen) im C-Stil. Es hat keine Vorteile gegenüber der integrierten Unterstützung für OOP in C++. –