我正在使用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);
但我認爲這是不緊湊。首先,使用起來不方便。其次,當數據量很大時,程序運行速度會變慢。
任何人都可以給我一個更好的解決方案嗎?模板能做到嗎?
非常感謝!
此外: 程序會將操作數值轉換爲字節序列,以便在編輯後重寫入文件。請考慮這項要求。
你能trivialy(即不完全解析)決定是否buf'''包含或int''double'?然後你可以做'if(tryParse(buf))' – Zereges