第十章g2o_custombundle中的common文件夹中的flags文件夹下的command_args.h

本文主要介绍了g2o_custombundle flags文件夹内的command_args.h和command_args.cpp,这两个文件定义了一个用于参数集管理的CommandArgs类。该类提供功能如设置参数默认值、参数描述和通过命令行赋值等。由于cpp文件内容较多,文章将逐步解析,目前还存在一些未理解的部分。
摘要由CSDN通过智能技术生成

先说一下这个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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值