避免在针对cout的C++MPI中重复if语句
Avoid repeated if statements in C++ MPI for cout
我正在用MPI(c接口,没有boost等)编写一个c++程序。在我的程序中,我有很多输出,要么到cout,要么到文件,这些输出只在秩0上完成。有什么好方法可以避免吗写if (rank == 0) cout << string
?
有两种方法可以在我的计算机上使用MPI实现,但对我来说都不稳定:
if (rank != 0)
cout.setstate(ios_base::badbit);
这有效地禁用了除0以外的所有列的输出,但允许吗?如果我这样做会有问题吗?
另一个想法是创建一个未打开的ofstream,并将输出重定向到那里。
ostream* os;
ofstream nullstream;
if (rank == 0)
os = &cout;
else
os = &nullstream;
*os << "rank " << rank << endl;
这使nullstream处于错误状态,但也有效地禁用了所有非0…列组上的输出
这个问题对我来说似乎很常见,所以如果在其他地方已经得到了回答,我很抱歉。我没有通过搜索找到答案,很高兴能重定向到现有问题。
如果您愿意牺牲对Windows系统的可移植性,在POSIX系统上静音输出的正确方法是将标准输出(以及可选的标准错误)重定向到/dev/null
:
int main() {
...
std::ofstream sink("/dev/null");
if (rank != 0) {
// Mute standard output
std::cout.rdbuf(sink.rdbuf());
// Optionally mute standard error
std::cerr.rdbuf(sink.rdbuf());
}
no_output_from_other_ranks_from_now_on();
...
}
根据这个答案改编。
我通常以某种方式使用预处理器宏,例如
#define COUT if(rank == 0) std::cout
然后你只需写
COUT << string;
不过,在我看来,目前还不清楚这种方法是否比你的方法更好。
相关文章:
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 需要有关此 if 语句的帮助
- 转换器练习:跳过 if 语句和 if 语句
- 避免在 C++ 中的 if 语句中递增
- 如果仍然不满足要求,如何使 if 语句重复?
- do while 循环中的 if 语句以 yes 或 no 结尾
- 为什么在此C++代码中触发此 if 语句?
- 如何基于平台在制作文件中制作if语句?
- 在 if 语句中使用 GetKeyState 时,它会跳过条件
- C++ If 语句,从其他语句重复