对std :: regex_match使用自定义分配器

时间:2019-10-15 16:36:24

标签: c++ stl

我想通过自定义分配器路由std :: regex_match执行的所有分配。

基于std::regex_match with another Allocator,我可以通过以下操作重新路由其中一些:

using string_type = std::basic_string<char, std::char_traits<char>, Allocator<char>>;
using match_type = std::match_results<string_type::const_iterator, Allocator<std::sub_match<string_type::const_iterator>>>;

string_type value;
match_type::allocator_type allocator;
match_type results(allocator);
std::regex expression("expression");
std::regex_match(value, results, expression);

但是std::vectors类内部有一些_Matcher,它们不使用传递的分配器。这是VS2017 STL库的疏忽吗,还是我做错了什么?有什么我可以解决的吗?

<regex>中不使用分配器的向量是:

_Tgt_state_t<_It> _Tgt_state; // contains vector<_Grp_t> _Grps;
_Tgt_state_t<_It> _Res; // contains vector<_Grp_t> _Grps;
vector<_Loop_vals_t> _Loop_vals;

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我怀疑这是VS2017的STL库中的一个疏漏;我看了libc ++,它似乎在内部使用了分配器作为向量。

答案 1 :(得分:1)

我将其归档为https://github.com/microsoft/STL/issues/174。据我所知,该标准对此主题保持沉默,因此MSVC和libc ++的行为都是一致的。使用match_results分配器似乎是合理的,但实际上应该对Standardese进行全面修改以要求特定的行为。