std :: regex_search和他的std :: smatch作为模板中的返回值

时间:2015-10-27 21:15:19

标签: c++11

查看我的代码并告诉我如何以正确的方式执行此操作。首先,这是我的配置管理器类的一部分。通常我想只使用读取函数有三种主要类型的数据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才能使其正常工作?我该怎么办?我真的没有想法。欢迎任何提示或代码片段。

1 个答案:

答案 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");