前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++11:读取properties文件的第三方库cpp_properties

C++11:读取properties文件的第三方库cpp_properties

作者头像
10km
发布2022-04-13 11:06:58
5270
发布2022-04-13 11:06:58
举报
文章被收录于专栏:10km的专栏10km的专栏

在Java开发环境中JDK内置了java.util.Properties类用于读取.properties文件,在Java应用开发时广泛用于读取参数配置文件。 最近在C++环境下做一个项目设计,也希望能通过读取.properties文件来获取参数配置文件.在github上找到了这个C++11实现的读取.properties文件的项目github.com/glywk/cpp_properties 。完全支持Java properteis语法。 cpp_properties使用起来很简单,全部源码都是用C++11模板类实现。没有.cpp文件,只要include进来就可以用了。但是需要boost的头文件支持。 我看到这个项目时只有2个星,非常不起眼,但代码质量是不错误的,经测试可用,因为项目的README.md写得不太完善,入手时还是摸索了些时间----后续我帮助作者更新了README.md,增加了调用示例.

使用很简单,下载源码直接将项目中的src/include/cpp_properties添加到自己的项目再加上Boost支持就可以用了。

代码语言:javascript
复制
git clone https://github.com/glywk/cpp_properties

以下是调用示例:

cpp_properties_parse_test.cpp(这个示例已经更新到cpp_properties项目中)

代码语言:javascript
复制
#include <cpp_properties/action/properties_action.hpp>
#include <cpp_properties/actor/properties_actor.hpp>
#include <cpp_properties/actor/traits/properties_actor_traits.hpp>
#include <cpp_properties/parser.hpp>
#include <map>
/** 测试数据  */
static const std::string DEFAULT_PROPERTIES = R"(
# Message Queue Type(REDIS,MQTT)
mq.implType=MQTT
# connect host
mq.connect.host=127.0.0.1
# connect port
mq.connect.port=1883
# user name for connections
#mq.connect.username=
# password for connections
#mq.connect.password=
# timeout(mills)
#mq.connect.timeout_ms=
# max count of reconnection
#mq.connect.max_reconnects=
# interval(mills) of reconnection
#mq.connect.reconnect_interval_ms=
)";

/*!
 * the main function simply parse the given proerties string into  
 * std::map<std::string, std::string>,if sucess,output all key=value to console.
 */
int main(int argc, char* argv[])
{

  std::map<std::string, std::string> cpp_properties;
  /** 解析properties数据结果保存到cpp_properties (map对象) */
  auto success = cpp_properties::parse(DEFAULT_PROPERTIES.begin(), DEFAULT_PROPERTIES.end(), cpp_properties);
  // print results
  if (success) {
  	  /** 遍历cpp_properties (map对象)所有的节点输出DEFAULT_PROPERTIES所有有效内容 */
      for (auto p : cpp_properties) {
          std::cout << p.first << '=' << p.second << "\n";
      }
  } else {
      /** 解析失败报错 */
      std::cout << "Lexical analysis failed\n"
          << "stopped at: \"" << DEFAULT_PROPERTIES << "\"\n";
  }
  return 0;
}

gcc编译:

代码语言:javascript
复制
g++ -o cpp_properties_parse_test -std=c++11 \
	-I ${BOOST_INCLUDE_DIR} \
	-I ${CPP_PROPERTIES_DIR}/src/include \
	-Wno-deprecated-declarations \
	cpp_properties_parse_test.cpp

{BOOST_INCLUDE_DIR}为boost的include文件夹位置 {CPP_PROPERTIES_DIR}为cpp_properties项目的位置

MSVC命令行编译(VS2015开发人员命令提示)

代码语言:javascript
复制
cl cpp_properties_parse_test.cpp ^
	/I${CPP_PROPERTIES_DIR}\src\include ^
	/I${BOOST_INCLUDE_DIR} /wd4819 ^
	cpp_properties_parse_test.cpp

执行生成的cpp_properties_parse_test exe程序

代码语言:javascript
复制
./cpp_properties_parse_test
mq.connect.host=127.0.0.1
mq.connect.port=1883
mq.implType=MQTT
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档