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的文档。例如: