假设这是对的:
std::function< void() > callback = std::bind( &Test::blah, test );
我可以做到吗
auto callback = std::bind(&Test::blah, test)
感谢
答案 0 :(得分:2)
std::bind
的返回值是未指定(§20.8.9.1.2),因此您基本上被迫使用auto
。但是,它返回一个可以存储在std::function
中的函数对象,它允许第一行工作。
答案 1 :(得分:0)
是的,事实上所有三个都可以使用:
std::function< void() > callback1 = std::bind( &Test::blah, test );
auto callback2 = std::bind(&Test::blah, test);
auto callback3 = [=]() mutable {test.blah();};
我的选择是lambda。
答案 2 :(得分:0)
试试这个:
struct f {
virtual void func(auto a) = 0;
};
struct g {
virtual void func(std::function<void()> a) = 0;
};
它们是两个完全不同的东西,有时你可以使用auto
但通常不会。只有函数局部变量可以合理地声明为auto
(在C ++ 14中可能是polylambdas)。
但是对于函数本地人来说,auto
是最好的选择。在大多数情况下,专家们完全避免使用显式类型的局部变量,这已经成为一种趋势。