生成详细输出的良好做法是什么?
生成详细输出的良好做法是什么? 目前,我有一个函数
bool verbose;
int setVerbose(bool v)
{
errormsg = "";
verbose = v;
if (verbose == v)
return 0;
else
return -1;
}
,每当我想生成输出时,我都会执行类似的操作
if (debug)
std::cout << "deleting interp" << std::endl;
,但是我认为这不是很优雅。 所以我想知道实现这种详细程度切换的好方法是什么?
what is good practice for generating verbose output? currently, i have a function
bool verbose;
int setVerbose(bool v)
{
errormsg = "";
verbose = v;
if (verbose == v)
return 0;
else
return -1;
}
and whenever i want to generate output, i do something like
if (debug)
std::cout << "deleting interp" << std::endl;
however, i don't think that's very elegant. so i wonder what would be a good way to implement this verbosity switch?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
1. 如果您使用 g++,您可以使用 -D 标志,这允许编译器定义您选择的宏。
定义
例如:
2. 我同意这也不优雅,所以为了让它更好一点:
您可以像 printf 一样使用:
3. 第三种解决方案更简单,更类似于 C++ 和 Unix 的方法是将一个参数传递给您的程序,该程序将被使用(如前面的宏)来初始化特定变量(可能是全局 const)。
例子 :
$ ./myprogram -v
1. If you are using g++ you could use the -D flag, this allows the compilator to define a macro of your choice.
Defining the
For instance :
2. I agree this isn't elegant either, so to make it a bit nicer :
That you could use like printf :
3. A third solution easier, and more C++ and Unix like is to pass an argument to your program that is going to be used - as the macro earlier - to initialize a particular variable (that could be a global const).
Example :
$ ./myprogram -v
您可以将您的功能包装在支持 << 的类中 运算符允许您执行类似的操作
然后您可以执行类似的操作
You can wrap your functionality in a class that supports the << operator which allows you to do something like
Then you can do something like
您可以使用 log4cpp
You could use log4cpp
最简单的方法是创建小类,如下所示(这里是 Unicode 版本,但您可以轻松地将其更改为单字节版本):
帮助函数
log
被制作为模板以获得良好的调用语法。 然后可以按以下方式使用它:您可以通过更改全局 GLOBAL_LEVEL 变量在运行时更改详细级别。
The simplest way is to create small class as follows(here is Unicode version, but you can easily change it to single-byte version):
Helper function
log
was made template to get nice call syntax. Then it could be used in the following way:You could change verbosity level at runtime by changing global
GLOBAL_LEVEL
variable.