Ho scritto un parser di espressioni di base e mi piacerebbe che fosse estensibile in modo da poter analizzare i tipi di espressione definiti dall'utente. Ad esempio, se durante l'analisi ho incontrato il carattere <
, voglio creare un'istanza della classe utilizzata per analizzare le espressioni che iniziano con questo carattere.Mappa C++ <char, puntatore metodo statico>?
Ho due domande:
Come posso associare un personaggio a un puntatore metodo statico?
Desidero utilizzare un metodo statico che restituirà una nuova istanza della classe poiché non è possibile ottenere un puntatore al costrutto della classe. La seguente sintassi è probabilmente sbagliato, ma questa è l'idea:
typedef static IValue * (*returnPtrIValue)(); map<char, returnPtrIValue> ...
Supponendo che ho di classe A e di classe B estende la classe A, posso inizializzare un puntatore a una funzione che restituisce un puntatore/ref a un A con un puntatore a una funzione che restituisce un puntatore/ref a un B poiché una B è una A?
Per esempio, posso fare:
typedef A * (*returnPtrA)(); B * func() { ... } returnPtrA foo = func;
L'analisi viene eseguita da un metodo/funzione 'class' condiviso da tutti gli oggetti, quindi perché si desidera creare una nuova istanza di una classe ogni volta? Basta memorizzare un oggetto globale della classe associato a '<' e usare il suo metodo. – iammilind
Perché nel modo in cui ho progettato il mio parser, un'espressione è un oggetto che si analizza da un pezzo di corda. – Virus721
se sei interessato a scrivere un parsing/lexer ti suggerisco di dare un'occhiata a 'libclang', ad esempio http://stackoverflow.com/questions/14509120/any-tutorial-on-libclang – user2384250