为什么下面代码中嵌套的std::bind
没有被任何主编译器(VS2010/2012,gcc,clang)隐式转换为std::function<void()>
?这是标准行为还是错误?为什么这个std :: bind没有转换成std :: function?
#include <functional>
void bar(int, std::function<void()>) { }
void foo() { }
int main()
{
std::function<void(int, std::function<void()>)> func;
func = std::bind(bar, 5, std::bind(foo));
std::cin.get();
return 0;
}
因为嵌套的绑定表达式被热切地评估。实际上,你正在做类似于'std :: bind(bar,5,void)'的东西,这是无意义的。 – ildjarn
这并不回答这个问题,但是这个:'func = std :: bind(bar,5,foo);'按照你的预期工作。 – 111111
你试图实现什么? 'bar'可以直接指定给'func',通过绑定你正在创建一个可以不带任何参数(或任何组合或参数)调用的函子的参数。使用当前代码(假设它已编译)'func'必须用int和'std :: function'调用,两个参数都会被忽略,并且会触发'bar(5,foo) ... –