【C++】读取参数的类
在C++程序中,如果我们把程序中的参数都保存在txt文本中,运行时再去读取。这样的好处是,当我们需要调参的时候,不需要每次都重新编译程序,大大提升了效率。
今日分享一份实现以上功能的代码,代码来源:https://www.cnblogs.com/gaoxiang12/p/4669490.html
文件夹结构
.
├── build
│ └──parameter.txt
├── CMakeLists.txt
├── include
│ └── base.h
└── src
└── test.cpp
在 include/base.h 头文件中
// 参数读取类
class ParameterReader
{
public:
ParameterReader( string filename="./parameters.txt" )
{
ifstream fin( filename.c_str() );
if (!fin)
{
cerr<<"parameter file does not exist."<<endl;
return;
}
while(!fin.eof())
{
string str;
getline( fin, str );
if (str[] == '#')
{
// 以‘#’开头的是注释
continue;
} int pos = str.find("=");
if (pos == -)
continue;
string key = str.substr( , pos );
string value = str.substr( pos+, str.length() );
data[key] = value; if ( !fin.good() )
break;
}
}
string getData( string key )
{
map<string, string>::iterator iter = data.find(key);
if (iter == data.end())
{
cerr<<"Parameter name "<<key<<" not found!"<<endl;
return string("NOT_FOUND");
}
return iter->second;
}
public:
map<string, string> data;
};
它读的参数文件如下, parameter.txt
# 这是一个参数文件
# 去你妹的yaml! 我再也不用yaml了!简简单单多好! detector=SIFT
descriptor=SIFT
good_match_threshold= # camera
camera.cx=325.5;
camera.cy=253.5;
camera.fx=518.0;
camera.fy=519.0;
camera.scale=1000.0;
主函数文件,src/test.cpp
#include <iostream>
#include <string>
#include "../include/basefunction.h" int main(int argc, char** argv)
{
ParameterReader pr;
float a1 = atof( pr.getData( "camera.fx" ).c_str());
string a2 = pr.getData( "detector" );
std::cout<<"camera.fx : "<<a1<<std::endl;
std::cout<<"detector : "<<a2<<std::endl; return ;
}
编译文件CMakeList.txt
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
set (CMAKE_CXX_STANDARD )
SET(CMAKE_BUILD_TYPE Debug) # project name,指定项目的名称,一般和项目的文件夹名称对应
project(TEST)
# source directory,源文件目录
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
# set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执 行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
SET(TEST_MATH
${DIR_SRCS}
)
# 头文件目录
INCLUDE_DIRECTORIES(
include
)
#6.add executable file,添加要编译的可执行文件
ADD_EXECUTABLE(test ${TEST_MATH}
之后通过cmake编译即可。
【C++】读取参数的类的更多相关文章
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...
- Python 之configparser读取配置操作类
一.为什么要封装 我们为什么要封装,我相信你们在项目开发过程中深有体会,那么这个读取配置工具类,又是为了什么? 为了项目参数配置的灵活性,不要改动到源码 为了信息的安全(一定层面的),体现代码重用性 ...
- flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习
1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...
- 做参数可以读取参数 保存参数 用xml文件的方式
做参数可以读取参数 保存参数 用xml文件的方式 好处:供不同用户保存适合自己使用的参数
- Python解析命令行读取参数 -- argparse模块
在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数.万能的python就自带了argprase包使得这一工作变得简单而规范.PS:optparse包是类似的功能,只不过写 ...
- C#反射技术的简单操作(读取和设置类的属性)
public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type ...
- 引用 U-boot给kernel传参数和kernel读取参数—struct tag
引用 清风徐徐 的 U-boot给kernel传参数和kernel读取参数—struct tag U-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb等.而Linux ...
- EpPlus读取生成Excel帮助类+读取csv帮助类+Aspose.Cells生成Excel帮助类
大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换 //EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls ...
- 接口测试工具-Jmeter使用笔记(六:从文本读取参数)
使用场景:测试一个接口并发处理数据的能力,并且每次请求传入的参数都要不同. 解决方法--- CSV Data Set Config 列举一个实例,步骤中会侧重读取参数操作的说明,其他有疑问的步骤请查阅 ...
随机推荐
- WordCount基本功能
WordCount基本功能 码云地址:https://gitee.com/Joker_zou/WordCount.git 一.项目需求 WordCount的需求可以概括为:对程序设计语言源文件统计字符 ...
- python-html基础操作
介绍: HTML 是网页内容的载体.包括文字,图片,信息等用户浏览的信息CSS 样式是改变内容外观表现.像字体,颜色,背景,边框等JavaScript 是实现网页上的特效效果.如鼠标滑过背景 ...
- SWUST OJ(960)
双向链表的操作问题 /*双向链表的操作问题*/ #include <stdio.h> #include <stdlib.h> typedef struct DLNode { i ...
- day042 css 选择器
css(Cascading Style Sheet) 层叠样式表,定义了如何显示HTML元素,给HTML设置样式,让它看起来更好 一.css语法 css样式包括两部门,选择器(给谁的样式)和声明(什么 ...
- mvn dependency:tree的用法
一.参考文档 https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-t ...
- Daily record-September
September11. I feel much more reassured when I've been for a health check. 体检之后我感到放心多了.2. The diseas ...
- c函数 文件名通配符
static bool IsMatched(CONST TCHAR* p, CONST TCHAR* q) { CONST TCHAR *r, *z, *x = _T(""); f ...
- extern介绍
存储类说明符extern.之前说过auto (auto int a:)extern的作用是:修饰变量/函数声明,表示是外部变量. e本身就是一个全局变量,所以在全局变量这个位置,加不加extern 都 ...
- python3入门教程(一)之 hello world
概述 python 这门语言这几年非常的火,很多技术都用的到,像爬虫,大数据,人工智能等,包括很多的小孩都首选python作为入门学习语言,那python 究竟是怎样一门语言呢? Python 是一个 ...
- 50个常用的Linux命令(三)基础实例
ls ls -als -l == llls -Aldrwxrwxrwx. 2 root root 6 Dec 21 20:38 Videos-rwxrwxrwx 1 root ...