Я разрабатываю синтаксический анализатор шрифта Adobe Type 1 с использованием языка C++. И есть проблема, когда я пытался декодировать данные DICT.Неопределенный тип возвращаемого значения функции
Операнды в DICT, которые хранятся в виде последовательности байтов в файле PDF, могут быть либо целыми, либо действительными.
Я определил функцию, прототип которой составляет getOperandVal(unsigned char* buf)
, чтобы декодировать последовательность до номера. И проблема возникла.
Прежде чем разобрать buf, мы не можем знать, что buf является реальным или целым числом. Поэтому я не могу определить тип возвращаемого значения, который должен быть int
или double
.
Решение состоит в использовании структуры как типа возвращаемого значения. Структура, как показано ниже:
typedef struct
{
int interger;
double real;
bool bReal;
}RET;
Затем прототип функции:
RET getOperandVal(unsigned char* buf);
Но я думаю, что это не является компактным. Прежде всего, это неудобно использовать. Во-вторых, программа будет работать медленнее, когда размер данных большой.
Может ли кто-нибудь дать мне лучшее решение? Может ли шаблон сделать это?
спасибо!
Дополнение: Программа передаст значение операндов в байтовую последовательность для перезаписи в файл после редактирования. Рассмотрите это требование, пожалуйста.
Не могли бы вы trivialy (т.е. не полный синтаксический) принимает решение содержит '' ли buf' int' или 'double'? Тогда вы можете сделать 'if (tryParse (buf))' – Zereges