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

2023-10-10 15:32

本文主要是介绍第十章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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/181370

相关文章

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

如何将文件夹里的PHP代码放到一个文件里

find ./dir -name "*.php" -exec 'cat' {} \; > dir.out

Linux 删除 当前下的 mysql-8.0.31 空文件夹

在Linux中,如果你想要删除当前目录下的名为mysql-8.0.31的空文件夹(即该文件夹内没有任何文件或子文件夹),你可以使用rmdir命令。但是,如果mysql-8.0.31文件夹并非完全为空(即它包含文件或子文件夹),rmdir命令会失败。 如果你的目标是删除mysql-8.0.31文件夹及其内部的所有内容(无论是否为空),你应该使用rm命令结合-r(或-R,它们是等价的)选项来递归地删

第十章 【后端】环境准备(10.4)——Vagrant

10.4 Vagrant Vagrant 官网 Vagrant 镜像仓库 下载 安装 直接 install。 设置环境变量 Vagrant 默认将镜像保存在用户文件夹的 .vagrant.d 目录下,若用户文件夹在C盘,下载的镜像文件会大量占用C盘空间。设置环境变量 VAGRANT_HOME 后,Vagrant 会将镜像保存到环境变量指定的文件夹下。

Python计算机视觉编程 第十章

目录 一、OpenCv基础知识 1.读取和写入图像 2.颜色空间 3.显示图像和结果 二、处理视频 1.输入视频 2.将视频读取到NumPy数组中 三、跟踪 1.光流 2.Lucas-Kanade算法 一、OpenCv基础知识 OpenCV 自带读取、写入图像函数以及矩阵操作和数学库。 1.读取和写入图像 import cv2# 读取图像im = c

Matlab simulink建模与仿真 第十章(模型扩展功能库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、模型扩展功能库中的模块概览         注:下面不会对Block Support Table模块进行介绍。 二、基于触发的和基于时间的线性化模块 1、Trigger-Based Linearization基于触发的线性化模块 (1)每次当模块受到触发时,都会调用linmod或者dlinmod函数

node快速复制文件或文件夹,排除部分文件(node_modules)

const fs = require('fs')const path = require('path')/*** @description: 获取完整的文件路径* @param {*} url 路径* @return {*} 返回完整的文件路径*/const getPath = (url) => {return path.join(__dirname, url)}/*** @descr

Eclipse发布Maven项目到tomcat,无法加载到lib文件夹下的jar包

BMS 解决方法: 当我们发布web项目到tomcat时,访问地址时会报一个classnotfound的错误,但是eclipse中的项目中都已经添加了相应的类,有一种比较容易犯的错误是,你没有把额外所需的jar包加到tomcat中的lib文件夹中,在这里介绍一种在项目中直接添加jar包到lib目录下:  右键已创建的web项目——properties属性——点击Deployment Assem

Vue组件文件夹结构建议

全局通用组件 位于src/components。 注意与业务组件区分,全局通用组件更强调基础性。类似于一个UI框架里的各种Input、Button、Tab,只是在此处是你自己封装的。 建议风格 文件夹命名使用PascalBase风格一个文件夹代表一个组件组件使用index.vue导出 示例 目录结构 - src- components- SvgIcon- index.vue 使用

虚拟机ubuntu与主机共享文件夹

现在主机(windows)上新建一个共享文件夹 打开虚拟机 按下面操作打开共享文件夹   进入虚拟机的系统    cd /mnt/hgfs 如果报错 可以按下面的解决   挂载一下  sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 如果显示不存在这个文件夹  我们可以去自己创建一个 cd /mnt