2014年2月17日月曜日

C++: Cなargs/argvを実行コマンドを除いてC++なstd::vectorのargumentsにして扱う方法

コレダケデス。
const std::vector<std::string> arguments_cxx(arguments_c + 1, arguments_c + number_of_arguments_c);
 std::vectorのコンストラクターには2つのイテレーター[begin, end)とオプションでアロケーターを受け取る定義がオーバーロードされているので、コレダケデス。

ランタイムに引数が無い場合はイテレーターのイメージとしては[1,1)をコンストラクターに渡す動作になるので、サイズ0の空のstd::vector<std::string>が生成されるだけで何も問題は起こりません。

ランタイムに引数が有った場合は例えば`a.out aaa bbb ccc`であれば、イテレーターのイメージとしては[1,4)をコンストラクターに渡す動作になるので、サイズ3のaaa,bbb,cccを要素に持ったstd::vector<std::string>が生成されます。

主に、引数の有無で場合分けなんて要らないんだよ、というお話でした(╹◡╹)

0 件のコメント:

コメントを投稿