这个size_t在 lambda 中有什么作用?C++代码
What does this size_t in the lambda do? C++ code
我是C++编程的新手,我遇到了这种语法。有人可以解释此语法中size_t的重点吗?
// Close the file stream.
.then([=](size_t)
{
return fileStream->close();
});
它是传递给函数的参数的类型。函数中不使用该参数。因此,它没有被命名。只有参数的类型在那里。
参数的类型可能存在,可能是因为 lambda 表达式传递到的客户端希望它具有类型size_t
的参数。客户端无法知道参数在 lambda 表达式中的使用方式或是否使用它。
这就像回调,您的回调从调用方接收数据,然后您对数据执行任何操作。 因此,如果您不需要数据,则可以跳过命名参数,因为它未引用 您可以通过阅读一些 winapi 函数的文档来查看有关回调的更多示例,尤其是枚举内容。例如 EnumWindows , EnumChildWindows EnumProc ....
正如其他人所说,lambda 表达式
[=](size_t)
{
return fileStream->close();
}
正在传递给方法调用
.then()
为了说明一些额外的信息:通常,称为.then()
的方法是期货回调接口的一部分。then()
方法在Future<T>
对象上调用,其中T
是某种类型。它将需要一个回调参数。这会导致回调链接:当Future<T>
完成时,我们将有一个T
,此时回调是使用该T
调用的。
在您的情况下,T = size_t
.因此,据推测,调用.then()
的Future
对象返回一个size_t
,然后将其传递给lambda[=] (size_t) { ... }
。然后,lambda 会丢弃size_t
,因为它不需要它。
如果不需要size_t
参数,那么获取它有什么意义?好吧,也许原始的Future
对象是某种读取调用,它将结果存储在其他地方(即工作是通过副作用完成的)并返回它读取的字节数(size_t
)。但是回调只是做一些清理工作,并不关心读取的内容。它类似于以下同步代码:
size_t readFile(char* buf) {
// ... store stuff in buf
return bytesRead;
}
auto closeFileStream(size_t) {
return fileStream->close();
}
closeFileStream(readFile(&buf));
就期货而言,它可能更像是:
Future<size_t> readFile(char* buf) {
// ... asynchronously store stuff in buf
// and return bytesRead as a Future
}
auto closeFileStream(size_t) {
return fileStream->close();
}
readFile(&buf)
.then(closeFileStream)
.get(); // wait synchronously
- "using namespace std;"在C++的作用是什么?
- archive_read_support_filter_all() 有什么作用?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 此代码中的" "是什么,它的基本作用是什么?
- 在模板参数中使用 {} 在 type_trait{} 中时,其作用是什么<T>?
- DrawShadow 中的 Elevation 究竟有什么作用?
- 测试"stream >> char"有什么作用?
- "uFlags &= ~CHN_PANNING"命令有什么作用?
- 代码编译但不起作用!cmd窗口只是理想和理想,但什么也没发生
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- <<、>>算子在循环中的作用是什么
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 当我尝试在函数内声明一个函数时,它不起作用?有什么建议吗?*源代码如下*
- int** a = new int*[n]();这个函数有什么作用?
- C++ 此函数调用之前的(void)有什么作用?
- 在c++中,减号和加号对字符串的作用是什么
- i+=(i&-i) 有什么作用?它是便携式的吗?
- atomic_thread_fence的作用域是什么
- 我做错了什么?GetDiskFreeSpaceExA的功能根本不起作用