在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