繁体   English   中英

如何在C ++ 11的单个表达式中声明'n'run lambda?

[英]How to declare'n'run lambda in a single expression in C++11?

像几乎所有自重的项目一样,我自己的项目也具有在调试模式下检查某些条件的宏:

#ifndef NDEBUG
#  define DCHECK(x) if (!(x)) { ... }
#else
#  define DCHECK(x)
#endif

但是现在我想DCHECK()一些复杂的条件,例如文件权限:

...
auto has_permissions = [fd] {
  struct stat st;
  if (fstat(fd, &st) == 0) {
    return (st.st_mode & (S_IRUSR | S_IWUSR)) == (S_IRUSR | S_IWUSR);
  }
  return false;
};
DCHECK(has_permissions());
...

另外,我也不想用除了唯一的DCHECK()以外没有使用过的lambda污染我的代码,因为在Release模式下,它们将被标记为未使用的变量。

因此,问题是:是否存在一种紧凑的方式编写DCHECK()语句来声明,运行和检查任何复杂条件?

PS使用lambda不是强制性的-这只是我的建议。

可以重新实现PPS DCHECK() ,但是所有现有的调用都应该无需修改就可以正常工作。

DCHECK宏中定义lambda 调用它

DCHECK(([]{ return false; }()));
//                         ^^

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM