最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

即时焦点:tclap库的使用

来源:博客园


(资料图片仅供参考)

这是一个C++ 命令行解析库,通过使用 tclap 库,可以自定义命令行参数,最终运行程序时解析出来。

下载地址:https://tclap.sourceforge.net/

文档地址:https://tclap.sourceforge.net/html/classTCLAP_1_1ValueArg.html#abcfd865f772d3fd26cdbe4d8112b3722

安装

解压后把include目录复制到 usr/local/tclp 目录下即可使用,因为只有头文件

1 tar -xzvf tclap-1.2.5.tar.gz2 cd tclap-1.2.53 cd include4 sudo cp -r tclap/ /usr/local/include/

使用方法:

1 #include  2 #include  3 #include  4 using namespace std; 5 using namespace TCLAP; 6  7 template    8 Type stringToNum(const std::string& str){   9     istringstream iss(str);  10     Type num;  11     iss >> num;  12     return num;      13 } 14 15 int main(int argc, char* argv[])16 {17     /*18         第二个参数表示命令行参数之间用的分隔符,默认是空格19         第三个参数设置版本,使用 --version 可显示结果20         第四个参数表示是否创建Help信息,默认为true,使用-h或者--help即可展示21     */22     CmdLine cmd("this is description message", " ", "0.1", true); //创建命令行解释器23     /*    24         创建命令行参数25         第一个参数是短标识,即[-n 参数],第二个参数则是长标识,即[--name 参数],第三个参数是该命令行参数的说明,26         第四个参数表示该命令行参数是否必须设置,第五个参数表示该命令行参数的默认值,第六个参数说明该命令行参数的27         数据类型,只是在help信息中做展示使用28     */29     ValueArg nameArg("n", "name", "Name to print", false, "Tom", "std::string" );  // Tom is the default value30 31     ValueArg deviceIdArg("c", "cam", "Camera device id", false, 123, "integer" ); // 33 is the default value32 33     ValueArg deviceDataArg("d", "data", "data user defined", false, 2.3456, "double" ); // 33 is the default value34 35     ValueArg initBbArg("b", "boundingbox", "Init Bounding Box", false, "-1,-1,-1,-1", "x,y,w,h"); 36     cmd.add(nameArg); //向命令行解释器添加命令行参数37     cmd.add(deviceIdArg);38     cmd.add(deviceDataArg);39     cmd.add(initBbArg);40     cmd.parse(argc, argv);//解析命令行参数41     std::string name = nameArg.getValue(); //获得该命令行参数的值42     std::cout << "My name is: " << name << std::endl;43 44     int camId = deviceIdArg.getValue();45     std::cout << "Camera ID is: " << camId << std::endl;46 47     double data = deviceDataArg.getValue();48     std::cout << "data is: " << data << std::endl;49 50     std::stringstream initBbSs(initBbArg.getValue());51     double initBb[4];52     for (int i = 0; i < 4; ++i)53     {54         std::string singleValueStr;55         getline(initBbSs, singleValueStr, ",");56         initBb[i] = stringToNum(singleValueStr);57     }58     std::cout << "initBb : " << initBb[0] << " " << initBb[1] << " " << initBb[2] << " " << initBb[3] << std::endl;59  60     return 0;61 }

结果:

1 $ ./test  //未设置命令行参数,按默认值输出 2 My name is: Tom 3 Camera ID is: 123 4 data is: 2.3456 5 initBb : -1 -1 -1 -1 6  7 $ ./test -n zzqi -c 99 -d 3.5 -b 2,4,6,1  //设置了命令行参数,都会按照设置的值进行输出 8 My name is: zzqi 9 Camera ID is: 9910 data is: 3.511 initBb : 2 4 6 112 13 $ ./test --version14 ./test  version: 0.115     16     17 $ ./test -h18 USAGE: 19 20    ./test  [-b ] [-d ] [-c ] [-n ]21            [--] [--version] [-h]22 23 24 Where: 25 26    -b ,  --boundingbox 27      Init Bounding Box28 29    -d ,  --data 30      data user defined31 32    -c ,  --cam 33      Camera device id34 35    -n ,  --name 36      Name to print37 38    --,  --ignore_rest39      Ignores the rest of the labeled arguments following this flag.40 41    --version42      Displays version information and exits.43 44    -h,  --help45      Displays usage information and exits.46 47 48    this is description message

关键词: 命令行参数 参数表示 这是一个