nn::nlib::Nflags
を利用して、コマンドラインパーサーを簡単に構築する方法を示します。
Nflags
クラスを利用すると、コマンドライン引数の設定を簡単にC++の変数として利用することができるようになります。 更に、それらの変数はプログラム内に分散して定義することができるので、コマンドラインプログラムのモジュラリティを向上させることができます。
char* g_argvbuf[128] = {NULL};
int g_Argc;
char** g_Argv = &g_argvbuf[0];
bool NflagsSampleHelp() {
char args[2][128] = {"mycommand", "--help"};
g_Argv[0] = args[0];
g_Argv[1] = args[1];
g_Argc = 2;
errno_t e = Nflags::Parse(&g_Argc, &g_Argv);
if (e != 0) {
return false;
}
if (NLIB_FLAGS_help) {
Nflags::PrintHelp();
}
return true;
}
bool NflagsSampleCommand() {
char args[6][128] = {"mycommand", "--boolswitch", "--int32switch=12345",
"--stringswitch=Phi,Beta,Kappa", "--", "filename"};
g_Argv[0] = args[0];
g_Argv[1] = args[1];
g_Argv[2] = args[2];
g_Argv[3] = args[3];
g_Argv[4] = args[4];
g_Argv[5] = args[5];
g_Argc = 6;
"\nParsing 'mycommand "
"--boolswitch "
"--int32switch=12345 "
"--stringswitch=Phi,Beta,Kappa "
"-- filename"
"'\n");
errno_t e = Nflags::Parse(&g_Argc, &g_Argv);
if (e != 0) {
return false;
}
nlib_printf(
"boolswitch: %s\n", NLIB_FLAGS_boolswitch ?
"true" :
"false");
nlib_printf(
"int32switch: %d\n", NLIB_FLAGS_int32switch);
nlib_printf(
"stringswitch: %s\n", NLIB_FLAGS_stringswitch);
for (int i = 0; i < g_Argc; ++i) {
}
return true;
}
bool SampleMain(int, char**) { return NflagsSampleHelp() && NflagsSampleCommand(); }
NLIB_MAINFUNC