由于C++的高性能,在嵌入式或者树莓派这样的系统,采用这样的语言是非常合适的,这样可以在CPU性能不太高的场合,写出处理大量数据和功能的软件,并且运行速度飞快,这样既节省产品成本,又为社会节能作出贡献,因为可以大量节省CPU运算,就可以省电,就可以少浪费化石能源。
而对于linux这样的系统,采用boost库就更加方便了,因为很多功能已经进行封装,使用起来更加方便,不容易出错。那么本文,就来介绍一下怎么样简单地使用boost。
先要安装boost,可以采用源码安装,也可以使用编译库的方式来安装。采用源码安装,自己可以控制不同的版本,但这样需要自己编译,可能会花费比较多的时间。采用已经编译库的方式,就可以快速安装,往往没有最新的版本。
现在先以已经编译好的版本来作为例子。
运行下面的命令:
sudo apt-get install libboost-dev
就可以安装完成boost库,然后就是编写代码:
#include <iostream>
#include <string>
#include <boost/program_options.hpp>
namespace bpo = boost::program_options;
using namespace std;
int main(int argc, char const *argv[])
{
//步骤1:构造选项描述器
//选项描述起,其参数为该描述器名字
bpo::options_description opts("all options");
//选项存储器,继承自map容器
bpo::variables_map vm;
//步骤2:为选项描述器增加选项
//其参数依次为:key,value的类型,该选项描述
opts.add_options()
("filename", bpo::value<std::string>(), "the file name which want to be found")
("help", "this is a program to find a specified file");
//步骤3:先对命令行输入的参数做解析,而后将其存入选项存储器
//如果输入了未定义的选项,程序会抛出异常,所以对解析代码要用try-catch块包围
try {
//parse_command_line()对输入的选项做解析
//store()将解析后的结果存入选项存储器
bpo::store(bpo::parse_command_line(argc, argv, opts), vm);
} catch(...) {
std::cout<<"Input option not exsited."<<std::endl;
return -1;
}
//步骤4:参数解析完毕,处理实际信息
//count()检测该选项是否被输入
if(vm.count("help")) { //若参数中有help选项
//options_description对象支持流输出,会自动打印所有的选项信息
std::cout<<opts<<std::endl;
}
if(vm.count("filename")) {
//variables_map(选项存储器)是std::map的派生类,可以像关联容器一样使用,
//通过operator[]来取出其中的元素,但其内部的元素类型value_type是boost::any,
//用来存储不确定类型的参数值,必须通过模版成员函数as<type>()做类型转换后,
//才能获取其具体值
std::cout<<"find"<<vm["filename"].as<std::string>()<<std::endl;
}
if(vm.empty()) {
std::cout<<"no options found"<<std::endl;
}
return -1;
}
?进入目录进行编译:
g++-10.1 ?boost_main.cpp -lboost_program_options ? -o boost
编译成功之后,就可以运行编译出来的程序:
./boost ?--help
输出的结果如上图。
|