Help us understand the problem. What is going on with this article?

C++版のgetopt

More than 1 year has passed since last update.

以下のサイトのcmdline.hを使ってみてください。
cmdline.hをインクルードするだけで使えます。
非常にシンプルに使えるのでおすすめです。

git: https://github.com/tanakh/cmdline
作者のサイト: http://d.hatena.ne.jp/tanakh/20091028

使い方

宣言

#include "cmdline.h"
int main(int argc, char **argv){
 ...
 cmdline::parser p;
 ...
}

コマンドラインオプションの登録

parser::add<T>を使って登録します。Tは受け取る値の型です。

第1引数 フルネームのコマンドライン・オプション
第2引数 一文字のコマンドライン・オプション
第3引数 コマンドライン・オプションの説明
(--helpのとき表示)
第4引数 必須オプションかどうか
第5引数 初期値
#include "cmdline.h"
int main(int argc, char **argv){
 ...
 cmdline::parser p;
 p.add<int>("number",'n',"particle number",false,10);
 ...
}

コマンドラインオプションのパース

parser::parse_checkを使います。

#include "cmdline.h"
int main(int argc, char **argv){
 ...
 cmdline::parser p;
 p.add<int>("number",'n',"particle number",false,10);
 p.parse_check(argc,argv);
 ...
}

コマンドラインオプション値の取得

parser::getを使います。

#include "cmdline.h"
int main(int argc, char **argv){
 ...
 cmdline::parser p;
 p.add<int>("number",'n',"particle number",false,10);
 p.parse_check(argc,argv);
 int n = p.get<int>("number"); 
 ...
}

コマンドライン引数の残り

rest()はコマンドライン引数の残りをstring配列として返します。

#include "cmdline.h"
int main(int argc, char **argv){
 ...
 cmdline::parser p;
 p.add<int>("number",'n',"particle number",false,10);
 p.parse_check(argc,argv);
 int n = p.get<int>("number"); 
 if(p.rest().size() > 0){
  hoge=parser.rest()[0];
 }
 ...
}
habuyoshiaki
将棋クエスト2段 囲碁クエスト3段 Starcraft brood war rank B
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away