【发布时间】:2018-07-10 08:34:35
【问题描述】:
我正在尝试控制我的程序中的打印输出。我为此编写了一个小脚本,它接受命令行参数并根据传递给它的标志-v 决定打印或不打印。现在我必须在我的实际程序中到处写out(bool)。是否可以在程序开始时做出决定,只使用out 而不是out(bool)。
class mystreambuf : public std::streambuf
{
};
mystreambuf nostreambuf;
std::ostream nocout(&nostreambuf);
#define out(b) ((b==true)?std::cout : nocout )
int main(int argc, char* argv[])
{
std::cout << "Program name is: " << argv[0] << "\n";
int counter;
bool verbose;
if (argc == 1)
{
std::cout << "No command line argument passed" << argv[0] << "\n";
}
if (argc >= 2)
{
for (counter = 0; counter < argc; counter++)
{
std::cout << "Argument passed are: " << argv[counter] << "\n";
if (strcmp(argv[counter], "-v") == 0)
{
verbose = true;
}
else
{
verbose = false;
}
}
}
out(verbose) << "\n hello world \n";
system("pause");
}
【问题讨论】:
-
这听起来你真正需要的是一个日志框架......
-
作为一般规则,避免在代码中使用常量
true和false,它们实际上总是不必要的,只会增加冗长,从而降低可读性。不要写b == true,只写b。对于您的(具有讽刺意味的)verbose分配也是如此:这可以而且应该在一行中完成(而不是 eight):verbose = strcmp(argv[counter], "-v") == 0;— 此外,out应该是一个函数,而不是一个宏。