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

在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支持就可以用了。

git clone https://github.com/glywk/cpp_properties

以下是调用示例:

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

#include 
#include 
#include 
#include 
#include 
/** 测试数据  */
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,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编译:

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开发人员命令提示)

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程序

./cpp_properties_parse_test
mq.connect.host=127.0.0.1
mq.connect.port=1883
mq.implType=MQTT

你可能感兴趣的:(c/c++/c++11,c++11,properties,cpp_properties,boost)