Ich entwickle einen Parser der Schriftart Adobe Type 1 in C++ - Sprache. Und es gab ein Problem, als ich versuchte, die DICT-Daten zu dekodieren.Unbestimmter Rückgabetyp einer Funktion
Die Operanden im DICT, die als Bytefolge in der PDF-Datei gespeichert sind, können entweder eine Ganzzahl oder eine reelle Zahl sein.
Ich definierte eine Funktion, deren Prototyp getOperandVal(unsigned char* buf)
ist, um die Sequenz zu nummerieren. Und das Problem ist erschienen.
Bevor wir den Buf analysieren, können wir nicht wissen, ob der Buf real oder eine ganze Zahl ist. Daher kann ich den Rückgabewerttyp nicht bestimmen, der int
oder double
sein sollte.
Eine Lösung besteht darin, eine Struktur als Rückgabewerttyp zu verwenden. Die Struktur ist wie folgt:
typedef struct
{
int interger;
double real;
bool bReal;
}RET;
Dann ist die Funktion Prototyp ist:
RET getOperandVal(unsigned char* buf);
Aber ich denke, es ist nicht kompakt ist. Vor allem ist es unbequem zu verwenden. Zweitens wird das Programm langsamer ausgeführt, wenn die Datenmenge groß ist.
Kann mir jemand eine bessere Lösung geben? Kann Vorlage es tun?
Vielen Dank!
Addition: Das Programm wird den Operandenwert in Byte-Sequenz übertragen, um nach der Bearbeitung in Datei umgeschrieben zu werden. Betrachten Sie bitte die Anforderung.
Könnten Sie trivialy (das heißt nicht voll Parsing) entscheiden, ob 'buf' enthält' int' oder 'double'? Dann könnten Sie 'if (tryParse (buf)) ' – Zereges