像几乎所有自重的项目一样,我自己的项目也具有在 Debug模式下检查某些条件的宏:
#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()
语句来声明,运行和检查任何复杂条件?P.S. 使用lambda不是强制性的-这只是我的建议。
P.P.S.可以重新实现
DCHECK()
,但是所有现有的调用都应该可以正常工作,而无需进行修改。 最佳答案
在DCHECK
宏中定义lambda并调用它
DCHECK(([]{ return false; }()));
// ^^
Live demo
关于c++ - 如何在C++ 11的单个表达式中声明'n'run lambda?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24837196/