【发布时间】:2016-10-18 22:31:11
【问题描述】:
我正在使用 C++ 语言开发 Adobe Type 1 字体的解析器。当我尝试解码 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);
但我认为它并不紧凑。首先,使用起来不方便。其次,当数据量大时,程序运行速度会变慢。
谁能给我一个更好的解决方案?模板能做到吗?
非常感谢!
补充: 程序会将操作数的值转换为字节序列,以便在编辑后重写到文件中。请考虑一下这个要求。
【问题讨论】:
-
您能否简单地(即不完全解析)确定
buf是否包含int或double?然后你可以做if (tryParse(buf))
标签: c++ return-type opentype