使用std :: function的优点

Fie*_*Cod 0 c++ c++11 c++14

亲爱的stackoverflow用户.

我试图找到优点std::function,为什么我应该使用它而不是函子或指针来运行.可悲的是,我找不到令人满意的答案.

这就是为什么我会非常感激,如果你能告诉我什么是优点,什么std::function时候我应该使用它.希望我的问题能够帮助其他人.

Naw*_*waz 5

std::function实现了一种称为类型擦除的技术,因为你可以存储 任何可调用的实体std::function,无论是函子,成员函数还是自由函数 - 你甚至可以存储 成员数据,这看起来很直观!

这是一个例子,没有std::function(或类型擦除)就无法完成:

std::vector<std::function<void()>>  funs;
for(int i = 0; i < 10; ++i)
  funs.push_back([i] { std::cout << i < std::endl; });

for(auto const & f: funs)
   f();
Run Code Online (Sandbox Code Playgroud)

这是另一个存储成员数据的例子:

struct person
{ 
    std::string name;
};

int main()
{
    std::vector<person> people {
      {"Bjarne"},
      {"Alex"}
    };

    std::function<std::string(person const&)> name (&person::name);

    for(auto const & p : people)
       std::cout << name(p) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出(演示):

Bjarne
Alex
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.