我的程序接收三個參數:可選命令行參數
int bufferSize
int priority
int milliTimeOut
有沒有一種方法,使一些則params的可選(並設置這些PARAMS值作爲默認值)?
例如,如果用戶想離開priority
是默認優先級,但插入bufferSize
和milliTimeOut
,他是什麼類型時,他跑我的程序,以及如何檢查它在我的計劃?
我的程序接收三個參數:可選命令行參數
int bufferSize
int priority
int milliTimeOut
有沒有一種方法,使一些則params的可選(並設置這些PARAMS值作爲默認值)?
例如,如果用戶想離開priority
是默認優先級,但插入bufferSize
和milliTimeOut
,他是什麼類型時,他跑我的程序,以及如何檢查它在我的計劃?
您可以實施選項,正如您在Linux上經常看到的那樣。
$ program.exe -b 100 -p 1 -m 100
其中-b
代表BUFFERSIZE後跟一個值。同樣,-p
和-m
分別代表優先和milliTimeOut,後面跟着一個值。
你寫你的程序來處理這個問題,那就是先解析選項,然後它的值。然後你可以在命令行上知道哪些選項是缺少。一旦您知道缺少選項,您可以爲其(它們)使用默認值。
例如,
$ program.exe -b 100 -m 100
其中-p
丟失,這意味着,優先需要有它的默認值,由程序決定。
同樣,
$ program.exe -b 100
其中優先和milliTimeOut是默認值。
是的,您可以將參數設置爲可選參數,並在命令行中未輸入任何參數時提供默認值。剛剛例如,你可以使用-b
指定緩衝區的大小,並承擔64K如果輸入無:
int main(int argc, char **argv) {
int bufferSize = 65536;
然後是繁瑣的代碼來檢查命令行參數是否與-b
開始,如果是這樣,閱讀所需的緩衝區大小來自該參數的其餘部分。
您可能想要使用Boost program_options來緩解這一點。
Boost'program_options'是設計較差的boost庫之一;它試圖做太多。有更廣泛的更簡單的解決方案,比如'getargs'。 –
@JamesKanze:你爲什麼認爲這是*較差的設計*?我想知道它的較差的一面。 – Nawaz
@Nawaz它試圖在一個單一的實體做很多事情。 –
這完全取決於你如何解析命令行參數。如果您使用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
的參數不指定讓他們的默認值。
您應該閱讀package documentation,它非常完整和靈活(例如,您只能爲某些參數設置默認值)。
你比我快,我的朋友!所以讓我做點補充。在windows中你可以使用:'program.exe/b 100/p 1/m 100'。 –
@SeçkinSavaşçı:任何公約都可以遵循。他們只需要很好地記錄。在Windows上,您可以同時使用'-b'和'/ b'。所以你可以寫你的程序來處理這兩個問題。 – Nawaz
我知道你可以同時使用(沒有人限制你)。我只是想說,人們可以看到'/ b'就像參數傳遞一樣,並且沒有必要爲此而感到恐慌。 –