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 置为空