我想要实现的是将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来支持/修复函数指针转换。 [/编辑]
你知道我会尝试什么吗?