欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文件读取Config类

程序员文章站 2022-05-28 17:45:41
...

前言: 写一个负责参数读取的类Config,能够只更改default.yaml内容即可,无需在程序内部更改。
文件读取Config类
获取相机参数:

myslam::Config::setParameterFile("default.yaml");
double fx=myslam::Config::get<double> ("Camera.fx");

直接调用类中成员函数,需要static静态成员函数。
config.h

#ifndef CONFIG_H
#define CONFIG_H
 
#include "myslam/common_include.h" 
 
namespace myslam 
{
class Config
{
private:
   //1.类的静态成员,局部static对象,调用方便Config::config_
   //2.智能指针自动析构,Config类型
    static std::shared_ptr<Config> config_; 
    cv::FileStorage file_;//对象,作为成员变量?
    
    Config () {} //构造函数,private
public:
    ~Config();  // 析构函数
    
    // 输入参数地址,类的静态成员函数,调用方便,无需先生成对象。Config::setParameterFile()
    static void setParameterFile( const std::string& filename ); 
    
    // get成员函数,获取任意类型的参数值
    template< typename T >
    static T get( const std::string& key )
    {
        return T( Config::config_->file_[key] );//调用static静态成员变量Config::config_
    }
};
}
#endif // CONFIG_H

config.cpp

#include "myslam/config.h"
 
namespace myslam 
{
shared_ptr<Config> Config::config_ = nullptr;//成员变量需要初始化,且static关键字只出现在声明部分,定义不出现。
void Config::setParameterFile( const std::string& filename )
{
    if ( config_ == nullptr )
        config_ = shared_ptr<Config>(new Config);//空,新建new一个Config类对象
    config_->file_ = cv::FileStorage( filename.c_str(), cv::FileStorage::READ );
    if ( config_->file_.isOpened() == false )//file未打开
    {
        std::cerr<<"parameter file "<<filename<<" does not exist."<<std::endl;
        config_->file_.release();
        return;
    }
}
 
Config::~Config()
{
    if ( file_.isOpened() )
        file_.release();//释放内存
}

}

有关static类的静态成员部分,请参考之前的博客。

相关标签: 视觉SLAM14