C++11:读取properties文件的第三方库cpp_properties
Posted 10km
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 <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编译:
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++11:读取properties文件的第三方库cpp_properties的主要内容,如果未能解决你的问题,请参考以下文章