查看我的代码并告诉我如何以正确的方式执行此操作。首先,这是我的配置管理器类的一部分。通常我想只使用读取函数有三种主要类型的数据int,float,string(也许是未来的bool)。
template<typename T>
T Read(const std::string& name)
{
T retVal;
std::string buffer;
while(std::getline(m_hFile, buffer))
{
if(strstr(buffer.c_str(), name.c_str()))
{
std::smatch match;
const std::regex regex_patern("=\"(.*)\"");
std::regex_search(buffer, match, regex_patern);
retVal = ????
break;
}
}
return retVal;
}
我如何投射此std :: smatch才能使其正常工作?我该怎么办?我真的没有想法。欢迎任何提示或代码片段。
答案 0 :(得分:0)
我还没有对此进行测试,但我认为你明白了这一点:
template<typename T>
T Read(const std::string& name) {
T retVal;
std::string buffer;
while(std::getline(m_hFile, buffer)) {
if(strstr(buffer.c_str(), name.c_str())) {
std::smatch match;
const std::regex regex_patern("=\"(.*)\"");
std::regex_search(buffer, match, regex_patern);
if (!match.empty()) {
std::istreamstream ss(match[0]);
ss >> retVal;
}
break;
}
}
return retVal;
}
我通常使用boost::property_tree来读取配置文件:
// json example
// {
// 'foo': 'hello, world',
// 'bar': 1
// }
boost::property_tree::ptree config;
boost::property_tree::read_json("path", config);
auto hello_world = config.get<std::string>("foo");
auto one = config.get<int>("bar");