Chromium 回调函数二

base::Bind/Callback 相关的别名

using Bind = BindRepeating;
using Callback = OnceCallback;

using Closure = RepeatingCallback<void()>;
using OnceClosure = OnceCallback<void()>;

BindRepeating/BindOnce

BindRepeating 返回 RepeatingCallback 函数对象,BindOnce 返回 OnceCallback 函数对象,两者之间的区别时 RepeatingCallback 可以调用多次,而 BindOnce 只能调一次。

void Foo() {
  printf("Hello, world");
}

base::RepeatingCallback<void()> a = base::BindRepeating(&Foo);
a.Run(); // 正确,输出 Hello, world
a.Run(); // 正确,再次输出 Hello, world

base::OnceCallback<void()> a = base::BindOnce(&Foo);
a.Run(); // 错误,编译报错
std::move(a).Run(); // 正确,输出Hello, world
std::move(a).Run(); // 错误,前一次调用已经将 a 置为空