lambda中的这个尺寸是什么?C++;代码 我对C++编程很陌生,我遇到了这个语法。有人能解释一下这个语法中的大小吗 // Close the file stream. .then([=](size_t) { return fileStream->close(); });
它是传递给函数的参数的类型。函数中未使用参数。因此,它没有命名。只有参数的类型存在lambda中的这个尺寸是什么?C++;代码 我对C++编程很陌生,我遇到了这个语法。有人能解释一下这个语法中的大小吗 // Close the file stream. .then([=](size_t) { return fileStream->close(); });,c++,lambda,syntax,size-t,C++,Lambda,Syntax,Size T,它是传递给函数的参数的类型。函数中未使用参数。因此,它没有命名。只有参数的类型存在 参数的类型可能是因为向其传递lambda表达式的客户端希望它具有size\t类型的参数。客户端无法知道参数在lambda表达式中是如何使用的,也无法知道它是否被使用。这就像回调一样,您的回调从调用者接收数据,您可以对数据执行任何操作。 因此,如果不需要数据,可以跳过命名参数,因为它未被引用 通过阅读一些winapi函数(尤其是枚举函数)的文档,您可以看到更多关于回调的示例。e、 g EnumWindows,Enu
参数的类型可能是因为向其传递lambda表达式的客户端希望它具有
size\t
类型的参数。客户端无法知道参数在lambda表达式中是如何使用的,也无法知道它是否被使用。这就像回调一样,您的回调从调用者接收数据,您可以对数据执行任何操作。
因此,如果不需要数据,可以跳过命名参数,因为它未被引用
通过阅读一些winapi函数(尤其是枚举函数)的文档,您可以看到更多关于回调的示例。e、 g EnumWindows,EnumChildWindows EnumProc….正如其他人所说,lambda表达式
[=](size_t)
{
return fileStream->close();
}
正在传递给方法调用
.then()
为了进一步说明:通常,名为.then()
的方法是未来回调接口的一部分。对Future
对象调用then()
方法,其中T
是某种类型。它需要一个回调参数。这会导致回调链接:当未来的
完成时,我们将有一个T
,此时将使用该T
调用回调
在您的情况下,T=size\u T
。因此,可以推测,调用.then()
的Future
对象返回一个size\u t
,然后将其传递给lambda[=](size\u t){…}
。lambda然后丢弃size\t
,因为它不需要它
如果不需要size\t
参数,那么使用它有什么意义?好的,可能原始的未来的对象是某种读取调用,它将结果存储在其他地方(即工作是由副作用完成的),并返回它读取的字节数(大小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
Future readFile(char*buf){
//…以buf异步存储内容
//并将过去解读为未来
}
自动关闭文件流(大小\u t){
返回fileStream->close();
}
读取文件(&buf)
。然后(关闭文件流)
.get();//同步等待
lambda采用类型为size\t
的参数。它实际上没有使用那个参数,所以它甚至没有名字。据推测,调用代码需要一个函数在该点上取一个参数。我知道它是一种类型,但如果它没有在函数中使用,因此没有命名,那么将它放在那里有什么意义?@ColinSivak,它被一个希望函数取一个参数的客户机使用。客户没有责任弄清楚该参数是如何使用的,或者它是否被使用。我建议阅读一些关于lambdas的文档。例如: