| 1 |
#ifndef FILE_TO_ARGS_H |
| 2 |
#define FILE_TO_ARGS_H |
| 3 |
|
| 4 |
/*! |
| 5 |
\page file_to_args_page デフォルト引数の読み出し |
| 6 |
|
| 7 |
関数 optionHandler(argc, argv) があったときに、ファイルに記述したデフォルト設定を処理させるための仕組み。ファイルの記述を元に、argc, argv を生成する。 |
| 8 |
|
| 9 |
- \ref file_to_args_section_sample |
| 10 |
- \ref file_to_args_section_usage |
| 11 |
|
| 12 |
\n |
| 13 |
\section file_to_args_section_sample ビーゴ用の設定ファイル例 |
| 14 |
\include beegoconf |
| 15 |
|
| 16 |
\n |
| 17 |
\section file_to_args_section_usage 使用例 |
| 18 |
|
| 19 |
サンプルプログラム |
| 20 |
\code |
| 21 |
#include <iostream> |
| 22 |
#include <string> |
| 23 |
|
| 24 |
static std::string SerialPort = "/dev/ttyUSB0"; |
| 25 |
|
| 26 |
static void optionHandler(int argc, char *argv[]) { |
| 27 |
for (int i = 1; i < argc; ++i) { |
| 28 |
if (! strncmp("--port=", argv[i], 7)) { |
| 29 |
SerialPort = &argv[i][7]; |
| 30 |
} |
| 31 |
} |
| 32 |
} |
| 33 |
|
| 34 |
int main(int argc, char *argv[]) { |
| 35 |
|
| 36 |
FileToArgs fileArgs; |
| 37 |
if (fileArgs.load("configfile.txt")) { |
| 38 |
optionHandler(fileArgs.argc, fileArgs.argv, argv[0]); |
| 39 |
} |
| 40 |
optionHandler(argc, argv); |
| 41 |
|
| 42 |
std::cout << "serial port: " << SerialPort << std::endl; |
| 43 |
|
| 44 |
return 0; |
| 45 |
} |
| 46 |
\endcode |
| 47 |
|
| 48 |
設定ファイルの詳細説明 |
| 49 |
\verbatim |
| 50 |
# デフォルト設定 |
| 51 |
--port=/dev/usb/ttyUSB0 |
| 52 |
|
| 53 |
# programName が sloader のとき有効。--port=/dev/usb/ttyUSB0 の設定は上書きされる |
| 54 |
sloader --port=/dev/usb/ttyUSB1 |
| 55 |
|
| 56 |
# programName が正規表現 .+loader のときのみ有効 (aloader, abcloader など) |
| 57 |
# 基本的に、後ろの行での設定は、前に設定された項目を上書きする |
| 58 |
.+loader --port=/dev/usb/ttyUSB2 |
| 59 |
\endverbatim |
| 60 |
|
| 61 |
設定ファイルについて |
| 62 |
- '#' から始まる行は、コメントとして無視される |
| 63 |
- 各行が一つの引数として処理される |
| 64 |
- 行に空白で区切られた2つのトークンがある場合 |
| 65 |
- 最初のトークンと programName が一致した場合のみ、第2トークンが処理される |
| 66 |
- 最初のトークンには、正規表現が利用可能 (要 boost) |
| 67 |
|
| 68 |
\attention オブジェクト破棄と同時に引き渡した内容が無効になるため、引数情報はコピーされることが望ましい。 |
| 69 |
*/ |
| 70 |
|
| 71 |
|
| 72 |
/*! |
| 73 |
\file |
| 74 |
\brief ファイルから引数情報を取得する |
| 75 |
|
| 76 |
\author Satofumi KAMIMURA |
| 77 |
|
| 78 |
$Id$ |
| 79 |
*/ |
| 80 |
|
| 81 |
#include <memory> |
| 82 |
|
| 83 |
|
| 84 |
namespace beego { |
| 85 |
/*! |
| 86 |
\brief ファイルから引数情報の生成 |
| 87 |
*/ |
| 88 |
class FileToArgs { |
| 89 |
FileToArgs(const FileToArgs& rhs); |
| 90 |
FileToArgs& operator = (const FileToArgs& rhs); |
| 91 |
|
| 92 |
struct pImpl; |
| 93 |
const std::auto_ptr<pImpl> pimpl; |
| 94 |
|
| 95 |
public: |
| 96 |
int argc; |
| 97 |
char **argv; |
| 98 |
|
| 99 |
FileToArgs(void); |
| 100 |
~FileToArgs(void); |
| 101 |
|
| 102 |
/*! |
| 103 |
\brief 引数情報の読み出し |
| 104 |
|
| 105 |
\param fname [i] 設定ファイル |
| 106 |
\param programName [i] argv[0] に登録するプログラム名 |
| 107 |
|
| 108 |
\attention 読み出した内容は、デストラクト時に破棄される |
| 109 |
|
| 110 |
<strong>サンプル</strong> |
| 111 |
- \ref file_to_args_page |
| 112 |
*/ |
| 113 |
bool load(const char* fname, const char* programName = ""); |
| 114 |
}; |
| 115 |
}; |
| 116 |
|
| 117 |
#endif /* !FILE_TO_ARGS_H */ |