亲爱的stackoverflow用户.
我试图找到优点std::function,为什么我应该使用它而不是函子或指针来运行.可悲的是,我找不到令人满意的答案.
这就是为什么我会非常感激,如果你能告诉我什么是优点,什么std::function时候我应该使用它.希望我的问题能够帮助其他人.
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)
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
1113 次 |
| 最近记录: |