0

私のプログラムは 3 つの引数を受け取ります。

int bufferSize
int priority
int milliTimeOut

これらのパラメーターの一部をオプションにする (およびこれらのパラメーターの値をデフォルト値として設定する) 方法はありますか?

たとえば、ユーザーpriorityがデフォルトの優先度のままにしておきたいが、挿入しbufferSizeたい場合milliTimeOut、プログラムを実行するときに何を入力し、プログラムでそれをどのように確認しますか?

4

3 に答える 3

3

Linux でよく見られるように、optionsを実装できます。

$ program.exe -b 100 -p 1 -m 100

ここで-bbufferSizeの後に値が続きます。同様に、-pandはそれぞれpriority-mmilliTimeOutを表し、その後にそれらの値が続きます。

これを処理するプログラムを作成します。つまり、最初にオプションを解析し、次にその値を解析します。これにより、コマンド ラインで欠落しているオプションを知ることができます。欠落しているオプションがわかったら、それ (それら) のデフォルト値を取得できます。

例えば、

$ program.exe -b 100 -m 100

-pつまり、優先度に は、プログラムによって決定されるデフォルト値が必要です。

同様に、

$ program.exe -b 100 

ここで、prioritymilliTimeOutはデフォルトです。

于 2012-07-01T06:59:34.177 に答える
2

コマンドラインパラメータを解析する方法に完全に依存します。Boost program_optionsモジュールを使用する場合、次の方法で実行できます。

#include <boost/program_options.hpp>
namespace po = boost::program_options;

int main(int argc, char *argv[])
{
    int bufferSize;
    int priority;
    int milliTimeOut;

    po::options_description desc("Options for my program");
    desc.add_options()
        // Option 'buffer-size' and 'b' are equivalent.
        ("buffer-size,b", po::value<int>(& bufferSize)->default_value(8192),
            "The buffer's size")
        // Option 'priority' and 'p' are equivalent.
        ("priority,p", po::value<int>(& priority)->default_value(4),
            "The priority")
        // Option 'timeout' and 't' are equivalent.
        ("timeout,t", po::value<int>(& milliTimeOut)->default_value(30000),
            "Time out in ms")
        ;

    po::variables_map vm;
    po::store(po::parse_command_line(argc, argv, desc), vm);
    po::notify(vm);

    // Here your variables have the values specified by the user,
    // or the default one.
}

次に、次のようにプログラムを呼び出します。

program --buffer-size=100000 -t 600000
program -b 100000 --priority=10
program -b 5000 -t 50000 -p 15
program

指定しないパラメータは、デフォルト値を取得します。

パッケージのドキュメントを読む必要があります。これは非常に完全で柔軟性があります (たとえば、一部のパラメーターにのみデフォルト値を設定できます)。

于 2012-07-01T07:10:39.643 に答える
1

はい、引数をオプションにすることができ、コマンド ラインに何も入力されていない場合はデフォルト値を指定できます。たとえば、-bバッファ サイズを指定するために使用でき、何も入力されていない場合は 64K と見なされます。

int main(int argc, char **argv) { 

    int bufferSize = 65536;

次に、コマンド ライン引数が で始まるかどうかをチェックする面倒なコードが続きます-b。そうであれば、その引数の残りから目的のバッファ サイズを読み取ります。

Boost program_optionsを使用して、それをいくらか緩和したい場合があります。

于 2012-07-01T07:00:15.320 に答える