コマンドを解析するためのパーサーを作成する必要があります。5つのそのようなコマンドは次のとおりです。
"a=10"
"b=foo"
"c=10,10"
"clear d"
"c push_back 2"
最初の例の場合、setはコマンド、aはオブジェクト、10は値です。
上記の各行について、パーサーは何を返す必要があると思いますか?
これが私の考えです:
"a=10" -> SET (COMMAND_ENUM), INT (VALUE_TYPE), "a", ("10")
"b=foo" -> SET (COMMAND_ENUM), STRING (VALUE_TYPE), "b", ("foo")
これは良いアプローチですか?この問題の標準的なアプローチは何ですか?代わりに発送する必要がありますか?
オブジェクトに関連付けられている型をチェックする関数があります。たとえば、a
上記はタイプINT
であり、値を割り当てる必要がありINT
ます。そうしないと、パーサーは何らかのエラーを返すかスローする必要があります。文字列から目的のタイプに値を変換するための変換関数もあります。変換が不可能な場合、これらはスローされます。パーサーが値を文字列から必要なタイプに変換しようとする場合は、boost::variantを介して値を返すことをお勧めします。