文件读取Config类

前言: 写一个负责参数读取的类Config,能够只更改default.yaml内容即可,无需在程序内部更改。
在这里插入图片描述
获取相机参数:

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类的静态成员部分,请参考之前的博客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值