c++ - C++ |使用lambda函数检查流是否成功打开

标签 c++ lambda

如果捕获的文件流返回故障位(fs.fail() == nullptr),我想使用lambda函数返回 bool(boolean) 值。
我使用正常的控制流进行了测试,流确实成功打开以进行提取。但是,带有lambda函数的类似代码似乎不起作用。怎么来的?

const std::string RATE = "data/list.csv";

void lambdaTest() {
  static std::fstream fs;
  fs.open(RATE, std::ios::in);

  /* check whether the filestream was opened successfully */
  if (fs.fail()) {
    std::cout << "\nFAILD TO OPEN." << std::endl;
  } else {
    std::cout << "\nINSTREAM READY." << std::endl;
  }
  
  /* lambda version: */
  if ([&]() { return fs.fail(); } ()) { std::cout << "FAILED TO OPEN." << std::endl; }
  else { std::cout << "INSTREAM READY." << std::endl; }
}

最佳答案

假设打开失败。然后

if (fs.fail()) return false;
将是false。 lambda将返回false,并且您的条件将不成立,并且不会打印打开失败的信息。
您可以将lambda更改为
[&]() { return fs.fail()); }

关于c++ - C++ |使用lambda函数检查流是否成功打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64291082/

相关文章:

python - pyopengl:它能取代 C++ 吗?

c++ - 在 vowpalwabbit 编译中未定义对 boost::program_options 的引用,ubuntu 16.04

c++ - 使用迭代器从双 for 循环构建 vector

java - 没有类型的 Lambda 表达式

c++ - 为每种类型的可变参数模板调用正确的模板特化

C# 二进制编写器自定义

c++ - 如何在 C++11/14 中实例化 lambda 闭包类型?

c# - 运行时的 Expression.Lambda 和查询生成,最简单的 "Where"示例

amazon-web-services - 无法从 Visual Studio 2017 发布到 AWS Lambda

c# - 在 Lambda/LINQ 中组合列表