nlib
nn::nlib::Nflags クラスfinal

コマンドラインフラグをパースするためのクラスです。 [詳解]

#include "nn/nlib/Nflags.h"

静的公開メンバ関数

static errno_t Parse (int *argc, char ***argv) noexcept
 コマンドラインフラグをパースします。 [詳解]
 
static errno_t Parse (int *argc, wchar_t ***argv) noexcept
 コマンドラインフラグをパースします。 [詳解]
 
static void PrintHelp () noexcept
 コマンドラインヘルプを表示します。 [詳解]
 
static const char * GetErrorMessage () noexcept
 エラーメッセージの文字列を取得します。 [詳解]
 
static errno_t GetFileName (const char *path, char(&filename)[kMaxFileName]) noexcept
 コマンドライン文字列で指定されたパス文字列からファイル名を取得します。 [詳解]
 
static errno_t GetDirName (const char *path, char(&dirname)[kMaxDirName]) noexcept
 コマンドライン文字列で指定されたパス文字列からディレクトリ名を取得します。 [詳解]
 
static errno_t GetStringCommaList (char *arg, char **vec, size_t vec_count, size_t *written_count) noexcept
 コンマ区切りの(コマンドライン引数)文字列を分割して配列に格納します。 [詳解]
 
template<size_t N>
static errno_t GetStringCommaList (char *arg, char *(&vec)[N], size_t *written_count) noexcept
 GetStringCommaList()の関数テンプレート版です。
 
static errno_t GetInt32CommaList (char *arg, int32_t *vec, size_t vec_count, size_t *written_count) noexcept
 コンマ区切りの(コマンドライン引数)文字列を分割して整数に変換して配列に格納します。 [詳解]
 
template<size_t N>
static errno_t GetInt32CommaList (char *arg, int32_t(&vec)[N], size_t *written_count) noexcept
 GetInt32CommaList()の関数テンプレート版です。
 
static errno_t GetDoubleCommaList (char *arg, double *vec, size_t vec_count, size_t *written_count) noexcept
 コンマ区切りの(コマンドライン引数)文字列を分割してdouble型に変換して配列に格納します。 [詳解]
 
template<size_t N>
static errno_t GetDoubleCommaList (char *arg, double(&vec)[N], size_t *written_count) noexcept
 GetDoubleCommaList()の関数テンプレート版です。
 
static bool GetBoolFromEnv (const char *varname, bool defval) noexcept
 環境変数の値をパースしてbool型の値を返します。環境変数が存在しなかったり、パースに失敗した場合はデフォルト値を返します。 [詳解]
 
static int32_t GetInt32FromEnv (const char *varname, int32_t defval) noexcept
 環境変数の値をパースしてint32_t型の値を返します。環境変数が存在しなかったり、パースに失敗した場合はデフォルト値を返します。 [詳解]
 
static int64_t GetInt64FromEnv (const char *varname, int64_t defval) noexcept
 環境変数の値をパースしてint64_t型の値を返します。環境変数が存在しなかったり、パースに失敗した場合はデフォルト値を返します。 [詳解]
 
static double GetDoubleFromEnv (const char *varname, double defval) noexcept
 環境変数の値をパースしてdouble型の値を返します。環境変数が存在しなかったり、パースに失敗した場合はデフォルト値を返します。 [詳解]
 
static const char * GetStringFromEnv (UniquePtr< char[]> &buf, const char *varname, const char *defval) noexcept
 環境変数の値を文字列として返します。bufにそのために確保されたバッファを格納します。 [詳解]
 

詳解

コマンドラインフラグをパースするためのクラスです。

説明
Nflagsはコマンドラインフラグの定義を複数のファイルに分散記述することができます。 この性質を利用して、各種ライブラリやモジュールにコマンドライン引数を設定しておくことで、再コンパイルなしにコマンドラインからプログラムの動作をカスタマイズすることが容易になります。
以下がNflagsを利用したコマンドライン処理コードの典型的な例です。 詳細は関数やマクロのリファレンスを参照してください。
#include "nn/nlib/Nflags.h"
int main(int argc, char* argv[]) {
errno_t e = Nflags::Parse(&argc, &argv);
if (nlib_is_error(e)) {
// コマンドライン文字列のエラー
return 1;
}
if (NLIB_FLAGS_help) {
// --helpオプションが指定された場合はヘルプテキストを表示して終わる
return 0;
}
.... 以下main関数の処理 .....
}
......
// コマンドラインフラグの定義
// 定義は各ソースファイルに分散しておくことができるので、main.cppを変更することなくコマンドラインスイッチを増設することが可能です。
NLIB_FLAGS_DEFINE_bool(myswitch, false, "My switch");
......
// コマンドラインフラグの参照
// 次のように書くことでNLIB_FLAGS_myswitchという名前でコマンドラインフラグを参照可能です。
参照
https://gflags.github.io/gflags/ (gflags)
各種例:
misc/nflags/nflags.cpp.

Nflags.h28 行目に定義があります。

関数詳解

◆ GetBoolFromEnv()

nn::nlib::Nflags::GetBoolFromEnv ( const char *  varname,
bool  defval 
)
staticnoexcept

環境変数の値をパースしてbool型の値を返します。環境変数が存在しなかったり、パースに失敗した場合はデフォルト値を返します。

引数
[in]varname環境変数名
[in]defvalデフォルトの戻り値
戻り値
環境変数の値
説明
環境変数の値が"1", "t", "true", "y", "yes"のいずれかの場合はtrueを返します。 また、"0", "f", "false", "n", "no"のいずれかの場合はfalseを返します。 それ以外の場合はdefvalを返します。

◆ GetDirName()

nn::nlib::Nflags::GetDirName ( const char *  path,
char(&)  dirname[kMaxDirName] 
)
staticnoexcept

コマンドライン文字列で指定されたパス文字列からディレクトリ名を取得します。

引数
[in]pathパス文字列
[out]dirnameディレクトリ名文字列
戻り値
0ならば成功
説明
Windows版では、path の文字列はUTF-8に変換されてdirname に格納されます。

◆ GetDoubleCommaList()

nn::nlib::Nflags::GetDoubleCommaList ( char *  arg,
double *  vec,
size_t  vec_count,
size_t *  written_count 
)
staticnoexcept

コンマ区切りの(コマンドライン引数)文字列を分割してdouble型に変換して配列に格納します。

テンプレート引数
N数値リストの最大格納数
引数
[in,out]argコンマ区切りされた文字列
[out]vec数値が格納される配列
[in]vec_count配列vec のサイズ
[out]written_count格納された数値の数
戻り値
0エラーは発生していません。
EINVAL引数にNULLや0を与えた場合
ERANGEコンマで区切られた文字列の数がvec の要素数を超えた場合
EILSEQコンマで区切られた文字列で数値に変換できないものがあった場合
説明
実行後にarg内の文字列の内容は変更されていることに注意してください。

◆ GetDoubleFromEnv()

nn::nlib::Nflags::GetDoubleFromEnv ( const char *  varname,
double  defval 
)
staticnoexcept

環境変数の値をパースしてdouble型の値を返します。環境変数が存在しなかったり、パースに失敗した場合はデフォルト値を返します。

引数
[in]varname環境変数名
[in]defvalデフォルトの戻り値
戻り値
環境変数の値

◆ GetErrorMessage()

nn::nlib::Nflags::GetErrorMessage ( )
staticnoexcept

エラーメッセージの文字列を取得します。

戻り値
エラーメッセージ
説明
Parse()関数でエラーが発生した場合はエラーメッセージ文字列が設定されます。 この関数を利用することでその文字列を参照することができます。

◆ GetFileName()

nn::nlib::Nflags::GetFileName ( const char *  path,
char(&)  filename[kMaxFileName] 
)
staticnoexcept

コマンドライン文字列で指定されたパス文字列からファイル名を取得します。

引数
[in]pathパス文字列
[out]filenameファイル名文字列
戻り値
0ならば成功
説明
Windows版では、path の文字列はUTF-8に変換されてfilename に格納されます。

◆ GetInt32CommaList()

nn::nlib::Nflags::GetInt32CommaList ( char *  arg,
int32_t *  vec,
size_t  vec_count,
size_t *  written_count 
)
staticnoexcept

コンマ区切りの(コマンドライン引数)文字列を分割して整数に変換して配列に格納します。

テンプレート引数
N整数リストの最大格納数
引数
[in,out]argコンマ区切りされた文字列
[out]vec整数が格納される配列
[in]vec_count配列vec のサイズ
[out]written_count格納された整数の数
戻り値
0エラーは発生していません。
EINVAL引数にNULLや0を与えた場合
ERANGEコンマで区切られた文字列の数がvec の要素数を超えた場合
EILSEQコンマで区切られた文字列で整数に変換できないものがあった場合
説明
実行後にarg内の文字列の内容は変更されていることに注意してください。

◆ GetInt32FromEnv()

nn::nlib::Nflags::GetInt32FromEnv ( const char *  varname,
int32_t  defval 
)
staticnoexcept

環境変数の値をパースしてint32_t型の値を返します。環境変数が存在しなかったり、パースに失敗した場合はデフォルト値を返します。

引数
[in]varname環境変数名
[in]defvalデフォルトの戻り値
戻り値
環境変数の値

◆ GetInt64FromEnv()

nn::nlib::Nflags::GetInt64FromEnv ( const char *  varname,
int64_t  defval 
)
staticnoexcept

環境変数の値をパースしてint64_t型の値を返します。環境変数が存在しなかったり、パースに失敗した場合はデフォルト値を返します。

引数
[in]varname環境変数名
[in]defvalデフォルトの戻り値
戻り値
環境変数の値

◆ GetStringCommaList()

nn::nlib::Nflags::GetStringCommaList ( char *  arg,
char **  vec,
size_t  vec_count,
size_t *  written_count 
)
staticnoexcept

コンマ区切りの(コマンドライン引数)文字列を分割して配列に格納します。

テンプレート引数
N文字列リストの最大格納数
引数
[in,out]argコンマ区切りされた文字列
[out]vec文字列(へのポインタ)が格納される配列
[in]vec_count配列vec のサイズ
[out]written_count格納された文字列の数
戻り値
0成功した場合
EINVAL引数にNULLや0を与えた場合
ERANGEコンマで区切られた文字列の数がvec の要素数を超えた場合
説明
--file=file1.txt,file2.txt,file3.txtというようなコマンドラインフラグの引数を処理したい場合に利用します。
// str = "text1,text2,text3" for example
char* x[3];
size_t len;
{
// エラー処理
....
}
for (size_t i = 0; i < len; ++i)
{
// x[i]で各文字列を取得
....
}
実行後にarg内の文字列の内容は変更されていることに注意してください。 なお、Windows版では、arg の文字列はUTF-8に変換されてvec に格納されます。

◆ GetStringFromEnv()

const char * nn::nlib::Nflags::GetStringFromEnv ( UniquePtr< char[]> &  buf,
const char *  varname,
const char *  defval 
)
inlinestaticnoexcept

環境変数の値を文字列として返します。bufにそのために確保されたバッファを格納します。

引数
[in,out]buf内部で動的に確保されたメモリ
[in]varname環境変数名
[in]defvalデフォルトの戻り値
戻り値
環境変数の値
説明
環境変数が存在しなかったり、メモリの確保に失敗した場合はデフォルト値を返します。 bufのバッファを解放した後に戻り値を参照しないように注意してください。

Nflags.h90 行目に定義があります。

◆ Parse() [1/2]

nn::nlib::Nflags::Parse ( int *  argc,
char ***  argv 
)
staticnoexcept

コマンドラインフラグをパースします。

引数
[in,out]argcコマンドラインフラグの個数へのポインタ。
[in,out]argvコマンドラインフラグへのポインタ。
戻り値
0パースに成功した場合
EILSEQ書式が間違っている
ENOENT指定されたオプションが存在しない
説明
関数にはmain関数に渡されたargc, argv の「ポインタ」を渡します。 引数をパースして定義されたオプションを見つけ変数を設定します。
この関数が処理した引数はargc, argv から取り除かれます(引数の数が減る)。 また、'--'の後に続く引数はこの関数では処理されません。

◆ Parse() [2/2]

nn::nlib::Nflags::Parse ( int *  argc,
wchar_t ***  argv 
)
staticnoexcept

コマンドラインフラグをパースします。

引数
[in,out]argcコマンドラインフラグの個数へのポインタ。
[in,out]argvコマンドラインフラグへのポインタ。
戻り値
0パースに成功した場合
EILSEQ書式が間違っている
ENOENT指定されたオプションが存在しない
説明
関数にはmain関数に渡されたargc, argv の「ポインタ」を渡します。 引数をパースして定義されたオプションを見つけ変数を設定します。
この関数が処理した引数はargc, argv から取り除かれます(引数の数が減る)。 また、'--'の後に続く引数はこの関数では処理されません。

◆ PrintHelp()

nn::nlib::Nflags::PrintHelp ( )
staticnoexcept

コマンドラインヘルプを表示します。

説明
通常、コマンドラインをパースした後にNLIB_FLAGS_helpがtrueの場合にこの関数を呼び出してプログラムを終了する、といった使い方をします。 この関数を呼び出さない限り--helpが指定されていてもコマンドラインヘルプは表示されません。

このクラス詳解は次のファイルから抽出されました: