【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[0] == '#')
            {
                // 以‘#’開頭的是注釋
                continue;
            }

            int pos = str.find("=");
            if (pos == -1)
                continue;
            string key = str.substr( 0, pos );
            string value = str.substr( pos+1, 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=4

# 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 0;
}

 

編譯文件CMakeList.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
set (CMAKE_CXX_STANDARD 11)
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編譯即可。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM