我有一组正则表达式,我必须将它们的捕获组映射到函数参数。在我看来,最简单的事情是从正则表达式捕获组构建一个元组并使用 std::apply 。所以我试图获得一个模板来将正则表达式转换为元组,但我没有让它工作。以下是我所拥有的。我尝试专门化递归,但似乎没有办法专门化函数模板。我对模板还很陌生,所以欢迎任何帮助 =)
template <size_t i>
string get_value(std::smatch& rx) {
return rx[i];
}
template <size_t i>
auto tuple_from_rx(std::smatch& rx) {
if (i > 0) {
return std::tuple_cat(tuple_from_rx<i -1>(rx), get_value<i>(rx));
}
else {
return std::tuple<>();
}
}
最佳答案
您可以使用以下内容:
template <std::size_t ... Is>
auto as_tuple(const std::smatch& base_match, std::index_sequence<Is...>)
{
return make_tuple(std::string{base_match[1 + Is]}...);
}
template <std::size_t N>
auto as_tuple(const std::smatch& base_match)
{
return as_tuple(base_match, std::make_index_sequence<N>());
}
您的实现的问题是 tuple_from_rx
会返回不同的类型。你必须改用特化:
template <size_t i>
auto tuple_from_rx(std::smatch& rx) {
return std::tuple_cat(tuple_from_rx<i -1>(rx), std::make_tuple(get_value<i>(rx)));
}
template <>
auto tuple_from_rx<0u>(std::smatch&) {
return std::tuple<>();
}
关于c++ - 从正则表达式构建元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45688664/