c ++ std :: function,可以替换为auto或不替换

时间:2014-11-29 07:04:16

标签: c++11

假设这是对的:

std::function< void() > callback = std::bind( &Test::blah, test );
我可以做到吗

auto callback = std::bind(&Test::blah, test)

感谢

3 个答案:

答案 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是最好的选择。在大多数情况下,专家们完全避免使用显式类型的局部变量,这已经成为一种趋势。