gpt4 book ai didi

c++ - std::regex_search() 不接受我的论点

转载 作者:行者123 更新时间:2023-11-28 00:27:27 25 4
gpt4 key购买 nike

我正在尝试在 Visual Studio Ultimate 2012 中编译以下代码。它给我一个错误,指出我正在调用模板 regex_search() 不存在的重载。

#include <regex>

struct Token
{
//lexertl token wrapper...
};

class Lexer
{
//...
Token &curr;
bool skipUntil(const std::regex &regexp);
};

bool Lexer::skipUntil(const std::regex &regexp)
{
std::smatch m;
const char *str = curr.results.start._Ptr; //compiles
//ERROR ON NEXT LINE (overload doesn't exist, but it should...)
if(std::regex_search(str, regexp, m)) {
curr.results.start = m[0].first;
curr.results.end = curr.results.start;
}
}

这是我正在尝试使用的模板,据我所知它存在...

//from <regex>
template <class charT, class Alloc, class traits>
bool regex_search (const charT* s, match_results<const charT*, Alloc>& m,
const basic_regex<charT,traits>& rgx,
regex_constants::match_flag_type flags = regex_constants::match_default);

我知道一个简单的解决方法是将 const char * 转换为 std::string,但考虑到这种操作成本太高。

最佳答案

regex_search 的参数以错误的顺序传递。第二个参数应该是 std::match_results ,第三个 std::basic_regex .

此外,std::smatch , 或 std::match_results<std::string::const_iterator>regex_search 的第一个参数时使用是std::string .由于您要传递 char const * , 你必须使用 std::cmatch (或 std::match_results<const char*> )。以下代码编译。

char const *str = "";
std::cmatch m;
std::regex regexp;
std::regex_search(str, m, regexp);

const char *str = curr.results.start._Ptr;

上面的行看起来很可疑。如果curr.results.start是 C++ 标准库中的某种类型,你绝对不应该访问那个 _Ptr成员,它应该是一个实现细节。使用它会使您的代码不可移植;当您升级到 VS2013 时,它甚至可能会中断。

关于c++ - std::regex_search() 不接受我的论点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24255838/

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