我的程序接收三个参数:可选命令行参数
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'就像参数传递一样,并且没有必要为此而感到恐慌。 –