gpt4 book ai didi

c++ - 从正则表达式构建元组

转载 作者:行者123 更新时间:2023-11-30 01:39:28 26 4
gpt4 key购买 nike

我有一组正则表达式,我必须将它们的捕获组映射到函数参数。在我看来,最简单的事情是从正则表达式捕获组构建一个元组并使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com