gpt4 book ai didi

c++ - 操作完成回调编程实践

转载 作者:行者123 更新时间:2023-11-30 03:39:35 25 4
gpt4 key购买 nike

为操作完成(也失败)的情况添加回调参数是一种好的编程习惯吗?示例:

template <typename F>
void load(::std::string const& path, F&& f)
{
// after a long load
::std::invoke(f, path);
}

这里,f 可能会在另一个线程的上下文中被调用。我的问题来自思考是否值得在程序中使用一次性信号/槽对。也就是说,一个插槽,只会被调用一次。否则,我们可能需要连接,然后断开信号,这被认为是乏味的。基本原理是,对于返回值,例如 bool 值,我们需要等待结果,而对于回调,我们不需要。

最佳答案

一般来说这不是坏习惯。正如在 Boost.Asio 中所见,这是异步编程的一个相当基础的部分。 .

Boost.Asio 对其所有回调函数使用几乎相同的语法,只是它是 C++03,因此它不能使用 invoke。一个例子是 async_read ,其中调用者告诉 Asio 从套接字读取,然后在完成时调用回调函数,回调函数要求(通过模板强制执行)将 error_code 作为将被填充的参数适本地。

关于c++ - 操作完成回调编程实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38720876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com