Boost.Regex:regex_replace - 将格式函数作为lambda表达式传递

时间:2013-06-19 08:13:44

标签: c++ visual-studio-2010 boost c++11 lambda

我想要实现的是将lambda表达式传递给一个函数,该函数使用该传递的表达式作为boost::xpressive::regex_replace函数的格式化函数。该代码应该在VC ++中使用VS 2010。

如果我有一个功能

void test1(){
    std::string str("foo");
    sregex re(icase("foo"));
    str = regex_replace(str,re,[](const smatch &match){ return "bar";});
}

我可以轻松地将lambda表达式作为格式函数传递。它也可以作为函数指针传递:

std::string test2_format(const smatch &match){
    return "bar2";
}

void test2_replace(std::string(*fun)(const smatch &match)){
    std::string str("foo");
    sregex re(icase("foo"));
    str = regex_replace(str,re,fun);
}

void test2(){
    test2_replace(test2_format);
}

但是如何将lambda表达式传递给函数呢?如果我打电话给

test2_replace([](const smatch &match)->std::string{return "bar3";});

我收到错误

  

错误C2664:'test2_replace':无法转换参数1   '`anonymous-namespace'::'to'std :: string(__ cdecl *)(const   boost :: xpressive :: smatch&)'

VS 2013上也会出现此错误。

[编辑]根据this link lambda来支持/修复函数指针转换。 [/编辑]

你知道我会尝试什么吗?

0 个答案:

没有答案