Ich habe einen sehr einfachen Ausdrucksparser geschrieben und möchte, dass er erweiterbar ist, damit er benutzerdefinierte Ausdruckstypen parsen kann. Zum Beispiel, wenn ich beim Parsen das Zeichen <
treffe, möchte ich eine Instanz der Klasse erstellen, die zum Parsen von Ausdrücken verwendet wird, die mit diesem Zeichen beginnen.C++ - Map <Zeichen, statischer Methodenzeiger>?
Ich habe zwei Fragen:
Wie kann ich ein Zeichen zu einem statischen Methode Zeiger verknüpfen?
Ich möchte eine statische Methode verwenden, die eine neue Instanz der Klasse zurückgibt, da ich keinen Zeiger auf die Klasse Constructr erhalten kann. Die folgende Syntax ist wahrscheinlich falsch, aber das ist die Idee:
typedef static IValue * (*returnPtrIValue)(); map<char, returnPtrIValue> ...
Angenommen, ich Klasse A, und die Klasse B erstreckt Klasse A, kann ich einen Zeiger auf eine Funktion, die einen Zeiger/ref an einem A initialisieren mit ein Zeiger auf eine Funktion, die einen Zeiger/ref auf ein B zurückgibt, da ein B ein A ist?
Zum Beispiel kann ich tun:
typedef A * (*returnPtrA)(); B * func() { ... } returnPtrA foo = func;
Das Parsen wird durch eine 'class' Methode/Funktion durchgeführt, die über alle Objekte verteilt wird. Warum möchten Sie dann jedes Mal eine neue Instanz einer Klasse erstellen? Speichern Sie einfach ein globales Objekt der Klasse, die mit '<' verknüpft ist, und verwenden Sie deren Methode. – iammilind
Da ein Ausdruck in der Weise, wie ich meinen Parser entworfen habe, ein Objekt ist, das sich selbst aus einer Zeichenfolge heraus analysiert. – Virus721
Wenn Sie ein Parsing/Lexer schreiben möchten, schlage ich vor, 'libclang' zu betrachten, zum Beispiel http://stackoverflow.com/questions/14509120/any-tutorial-on-libclang – user2384250