像几乎所有有自尊的项目一样,我自己的项目也有宏来检查 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());
...
此外,我不想用 lambda 污染我的代码,除了唯一的 DCHECK()
之外,这些 lambda 不会在任何地方使用,因为在 Release模式下它们将被标记为未使用的变量。
所以问题是:是否有一种紧凑的方式来编写声明、运行和检查任何复杂条件的 DCHECK()
语句?
P.S. 使用 lambda 并不是强制性的 - 这只是我的建议。
P.P.S. DCHECK()
可能会被重新实现,但所有现有的调用仍应无需修改即可工作。
最佳答案
关于c++ - 如何在 C++11 中的单个表达式中声明'n'run lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24837196/