c – 捕获破坏了我的lambda函数

我有一个函数getTotal:

int getTotal( const HitMap& hitMap, bool( *accept)(int chan) )

其中第二个参数是bool函数,指定应将容器hitMap的哪些成员添加到总数中.

我试着用lambda来调用它.这有效:

auto boxresult =
getTotal(piHits, [](int pmt)->bool
{ return (pmt/100) == 1;} );

但这不是:

int sector = 100;
auto boxresult =
getTotal(piHits, [sector](int pmt)->bool
{ return (pmt/sector) == 1;} );

我收到了错误

cannot convert ‘main(int, char**)::<lambda(int)>’ to ‘bool (*)(int)’
for argument ‘2’ to ‘int getTotal(const HitMap&, bool (*)(int))’

来自我的编译器(GCC 4.6.3).我试过[& sector]和[= sector],但没有任何区别.

我究竟做错了什么?

最佳答案
当lambda具有capture子句时,它不能再被视为函数指针.要更正,请使用std :: function< bool(int)>作为getTotal()的参数类型:

int getTotal( const HitMap& hitMap, std::function<bool(int)> accept)

转载注明原文:c – 捕获破坏了我的lambda函数 - 代码日志