私はC++言語を使ってAdobe Type 1フォントのパーサを開発しています。 DICTデータをデコードしようとすると問題が発生します。関数の返り値の型が不確定
DICT内のオペランドは、PDFファイルにバイトシーケンスとして格納され、整数または実数のいずれかになります。
プロトタイプがgetOperandVal(unsigned char* buf)
である関数を定義して、シーケンスを数値にデコードしました。そして問題は現れた。
bufを解析する前に、bufが実数または整数であることはわかりません。戻り値の型は、int
またはdouble
である必要があります。
戻り値型としてstructを使用する方法があります。構造体は以下のようなものです:
RET getOperandVal(unsigned char* buf);
しかし、私はそれがコンパクトではないと思う:
typedef struct
{
int interger;
double real;
bool bReal;
}RET;
次に、関数のプロトタイプです。まず、使用するのは不便です。第二に、データのサイズが大きい場合、プログラムの実行速度が遅くなります。
もっと良い解決策を教えてもらえますか?テンプレートはそれを行うことができますか?
ありがとうございました!
追加: プログラムは、編集後にファイルに書き換えるためにオペランド値をバイトシーケンスに転送します。要件を考慮してください。
を使用することができるでしょうか?それで 'if(tryParse(buf))' – Zereges