我有一个函数模板,它接受一个可调用对象,包括如下所示的lambda
template<class ValueT, class ValidatorF>
void myFun(ValueT& value, ValidatorF validate)
{
...
if (validate(value)) ... // call to validate the value
...
}
我可以像下面这样使用它和验证器来测试整数是否大于0
int i = 10;
myFun(i, [](int& value) {return value > 0;});
现在,我希望验证者测试整数是否大于特定数字(不只是0),我可以
auto greaterThan = [](int number)
{ return [number](int& value) { return value > number; }; };
但是以上内容无法使用VS2013进行编译。有任何错误或方法可以使其正常工作吗?
我刚刚在Coliru中测试。没关系。也许是由于VS2013。通过测试
int main()
{
auto greaterThan = [](int number)
{ return [number](int& value) { return value > number; }; };
}
VS2013编译错误是
Error 1 error C2440: 'return' : cannot convert from 'main::<lambda_20b9557a9ed9208edabcd15f35d83ad2>::()::<lambda_44761a42f06f1791bdbf89e7a9b3a961>' to 'bool (__cdecl *)(int &)' main.cpp 8
除了ecatmur所说的之外,您还可以决定实现GreaterThan方法的未固化版本并使用std :: bind绑定第二个参数:
auto greaterThan = [](int num1, int num2) -> { return num1 > num2; };
myFun(i, std::bind(greaterThan, _1, number) );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句