最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++讀取配置文件的示例代碼

 更新時間:2020年08月14日 08:37:50   作者:gongluck  
這篇文章主要介紹了C++讀取配置文件的示例代碼,幫助大家更好的理解和學(xué)習(xí)C++開發(fā),感興趣的朋友可以了解下

代碼地址

https://github.com/gongluck/Code-snippet/tree/master/cpp/config

需求

開發(fā)中,讀取配置文件信息必不可少。Windows平臺有現(xiàn)成的API可用,也很方便。但是一旦項目遷移到Linux平臺下,原先在Windows平臺下的代碼就全部作廢。所以,實現(xiàn)一套跨平臺的配置文件讀取功能代碼可以節(jié)省不少的勞動力。

實現(xiàn)

依賴于boost的ini_parser,可以實現(xiàn)跨平臺讀取ini格式的配置文件。

// config.h
/*
 * @Author: gongluck 
 * @Date: 2020-03-23 15:11:50 
 * @Last Modified by: gongluck
 * @Last Modified time: 2020-03-23 15:17:58
 */

// Profile read, dependent on boost

#pragma once

#include <iostream>
#include <vector>
#include <boost/property_tree/ptree.hpp>

namespace gconf
{
class config
{
public:
  int open(const char *configfile);
  template <typename T>
  int read(const char *session, const char *key, T &value, const char *configfile = nullptr)
  {
    if (configfile != nullptr && open(configfile) != 0)
    {
      return -1;
    }

    try
    {
      auto lvbtItems = lvptProperties_.get_child(session);
      value = lvbtItems.get<T>(key);
    }
    catch (std::exception &e)
    {
      std::cerr << __FILE__ << " : " << __LINE__ << " : " << e.what() << std::endl;
      return -1;
    }

    return 0;
  }
  int readall(const char *session,
        std::vector<std::pair<std::string, std::string>> &results,
        const char *configfile = nullptr);

private:
  boost::property_tree::ptree lvptProperties_;
};
} // namespace gconf
// config.cpp
/*
 * @Author: gongluck 
 * @Date: 2020-03-23 15:13:13 
 * @Last Modified by: gongluck
 * @Last Modified time: 2020-03-23 15:17:56
 */

#include "config.h"
#include <boost/property_tree/ini_parser.hpp>

namespace gconf
{
int config::open(const char *configfile)
{
  if (configfile == nullptr)
  {
    return -1;
  }

  try
  {
    boost::property_tree::ini_parser::read_ini(configfile, lvptProperties_);
  }
  catch (std::exception &e)
  {
    std::cerr << __FILE__ << " : " << __LINE__ << " : " << e.what() << std::endl;
    return -1;
  }

  return 0;
}

int config::readall(const char *session,
          std::vector<std::pair<std::string, std::string>> &results,
          const char *configfile /*= nullptr*/)
{
  if (configfile != nullptr && open(configfile) != 0)
  {
    std::cerr << __FILE__ << " : " << __LINE__ << " : "
         << " can not open " << configfile << std::endl;
    return -1;
  }

  try
  {
    auto lvbtItems = lvptProperties_.get_child(session);
    for (const auto &i : lvbtItems)
    {
      results.push_back(std::make_pair(i.first.data(), i.second.data()));
    }
  }
  catch (std::exception &e)
  {
    std::cerr << __FILE__ << " : " << __LINE__ << " : " << e.what() << std::endl;
    return -1;
  }

  return 0;
}
} // namespace gconf
// testcode
#include <iostream>

#include "../config/config.h"

#define CHECKRET(ret)\
if(ret != 0)\
{\
  std::cin.get();\
  return ret;\
}

int main()
{
  gconf::config conf;
  auto ret = conf.open("./config.ini");
  CHECKRET(ret);
  int file = 0;
  ret = conf.read<int>("log", "file", file);
  CHECKRET(ret);
  std::vector<std::pair<std::string, std::string>>kvs;
  ret = conf.readall("log", kvs);
  CHECKRET(ret);
  return 0;
}

以上就是C++讀取配置文件的示例代碼的詳細內(nèi)容,更多關(guān)于C++讀取配置文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • QT實現(xiàn)QML側(cè)邊導(dǎo)航欄的最簡方法

    QT實現(xiàn)QML側(cè)邊導(dǎo)航欄的最簡方法

    本文主要介紹了QT實現(xiàn)QML側(cè)邊導(dǎo)航欄的最簡方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++人工模擬棧實現(xiàn)方法

    C++人工模擬棧實現(xiàn)方法

    在本篇內(nèi)容里小編為大家整理了關(guān)于C++人工模擬棧實現(xiàn)方法和步驟,需要的朋友們可以學(xué)習(xí)下。
    2018-12-12
  • C++帶有指針成員的類處理方式詳解

    C++帶有指針成員的類處理方式詳解

    這篇文章主要為大家詳細介紹了C++帶有指針成員的類處理方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解C++的JSON靜態(tài)鏈接庫JsonCpp的使用方法

    詳解C++的JSON靜態(tài)鏈接庫JsonCpp的使用方法

    這篇文章主要介紹了C++的JSON靜態(tài)鏈接庫JsonCpp的使用方法,演示了使用JsonCpp生成和解析JSON的方法,以及C++通過JSON方式的socket通信示例,需要的朋友可以參考下
    2016-03-03
  • C++ this指針和空指針的具體使用

    C++ this指針和空指針的具體使用

    這篇文章主要介紹了C++ this指針和空指針的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C語言實現(xiàn)三子棋游戲的示例代碼

    C語言實現(xiàn)三子棋游戲的示例代碼

    今天我們將會用C語言實現(xiàn)三子棋。所謂三子棋,就是三行三列的棋盤,玩家可以和電腦下棋,率先連成三個的獲勝。話不多說,我們開始吧
    2022-10-10
  • C++?OpenCV實現(xiàn)白平衡之完美反射算法

    C++?OpenCV實現(xiàn)白平衡之完美反射算法

    完美反射算法是白平衡各種算法中較常見的一種,比灰度世界算法更優(yōu)。本文將利用C++和OpenCV實現(xiàn)白平衡中的完美反射算法,需要的可以參考一下
    2022-05-05
  • 用VC++6.0實現(xiàn)石頭剪刀布游戲的程序

    用VC++6.0實現(xiàn)石頭剪刀布游戲的程序

    最先看到這個游戲代碼是python版的,后來看到有小伙伴用VC++重寫了一遍,運行之后發(fā)現(xiàn)有些小bug,便嘗試這修復(fù)了一下,并增加了些小功能,這里分享給大家。
    2015-03-03
  • 怎么通過C語言自動生成MAC地址

    怎么通過C語言自動生成MAC地址

    以下是對使用C語言自動生成MAC地址的實現(xiàn)代碼進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • C++發(fā)送郵件實現(xiàn)代碼

    C++發(fā)送郵件實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了C++發(fā)送郵件的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

定西市| 蓝田县| 大连市| 靖边县| 安泽县| 安泽县| 乐昌市| 铜陵市| 镇坪县| 丰镇市| 左云县| 京山县| 英超| 慈利县| 三明市| 永靖县| 黑山县| 伽师县| 泰州市| 酒泉市| 江源县| 江山市| 炎陵县| 文山县| 太原市| 黄骅市| 徐水县| 雷波县| 通河县| 遵化市| 和田县| 勐海县| 安乡县| 万荣县| 论坛| 遵化市| 全州县| 噶尔县| 汉中市| 宣汉县| 浏阳市|