本文主要是介绍第十章g2o_custombundle中的common文件夹中的flags文件夹下的command_args.h,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先说一下这个flags文件夹下的两个文件:
command_args.h和command_args.cpp。
头文件中只定义了一个类:class CommandArgs{}
看下来这个类的作用是一个参数集管理类,它将很多参数看成一个集,集中进行管理。有一些功能:给参数赋默认值、给参数写一个参数描述,给参数通过命令行来赋值等等,程序里会体现。
.h和.cpp两个一起定义了完整的CommandArgs,由于.cpp文件略长,所以分两篇来写。
这篇是看了个大概的一些注释,其中还存留一些不清楚的地方,后续慢慢看还会细化。
好了,贴代码及注释:
#ifndef G2O_COMMAND_ARGS_H
#define G2O_COMMAND_ARGS_H#include <string>
#include <vector>
#include <iostream>
#include <sstream>/*** \brief Command line parsing of argc and argv.** Parse the command line to get the program options. Additionally,* we can store the config in a file and reload a parameter set from* this file.*/
//该类用于解析用户输入的参数,同时也对程序需要的参数提供默认值及文档说明。
/*** 这个类看起来有点像参数描述集的感觉:* 首先_args[]成员存储了参数的所有描述,每个描述都是一个CommandArgument小结构体* _leftOvers和_leftOversOptional还没看明白????* _progName成员记录了是哪个程序的参数描述集* _banner成员用于给一个参数描述集设定一个标示,有了标示之后可以切换调用不同参数描述集**** 这里整体来说一下这个类:* 首先定义了结构体CommandArgument,这个结构体就是参数后面的描述块,其中记录了参数的各种信息。* 再看成员函数:* parseArgs()用于解析命令行传入的参数自定义值,传入了就将默认值覆盖掉。解析成功返回true。** 一堆重载的param()函数,用于往_args[]中添加参数描述块,同时会给参数赋默认值。** paramLeftOver()用于往_leftOvers和_leftOversOptional中添加描述块** 因为_banner是protected的,所以必须要有getBanner()和setBanner()来读取和设定_banner的值** parsedParam()函数用于查看一个参数是否由命令行设置新值并成功解析。也就是查看一个参数描述块中的parsed属性值,* 这个属性值只有在读命令行参数时,也就是调用parseArgs()函数时才会被置为true,在用param()设定默认值时是不会被置为true的。** printParams()、type2str()、str2arg()、arg2str()和trim()都是一些小功能函数。**/
class CommandArgs
{
public:/*** 这个结构体就是参数背后链接的关于参数的说明块,有name type等等说明,它跟参数的链接通过data指针进行链接。* 整个来看还是外部参数的一个描述结构体,并不会真正的去存储参数。** 结构体成员CommandArgument。* 这个结构体用于记录参数的特性信息,仅是记录参数信息,并不会真正存储参数和参数值。* string name:参数名称* string description:参数的一些具体描述* int type:参数类型,这里用int值来表示类型,在command_args.cpp中有枚举定义:* enum CommandArgumentType* {CAT_DOUBLE, CAT_FLOAT, CAT_INT, CAT_STRING, CAT_BOOL, CAT_VECTOR_INT, CAT_VECTOR_DOUBLE};* void* data :指向参数的指针。就是这个指针链接外部的参数变量。* bool parsed :是否已通过命令行解析性* bool optional :是否为可选参数*/struct CommandArgument{std::string name;std
这篇关于第十章g2o_custombundle中的common文件夹中的flags文件夹下的command_args.h的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!