我正在制作一个小系统,我希望能够切换"详细"整个系统中的文本输出。
我创建了一个名为globals.h的文件:
namespace REBr{
extern bool console_verbose = false;
}
如果这是真的,我希望我的所有课程在构建,破坏,复制或做任何事情时都会向控制台打印一条消息。
例如:
window(string title="",int width=1280,int height=720):
Width(width),Height(height),title(title)
{
if(console_verbose){
std::cout<<"Generating window #"<<this->instanceCounter;
std::cout<<"-";
}
this->window=SDL_CreateWindow(title.c_str(),0,0,width,height,SDL_WINDOW_OPENGL);
if(console_verbose)
std::cout<<"-";
if(this->window)
{
this->glcontext = SDL_GL_CreateContext(window);
if(console_verbose)
std::cout<<".";
if(this->glcontext==NULL)
{
std::cout<<"FATAL ERROR IN REBr::WINDOW::CONSTR_OPENGLCONTEXT: "<<SDL_GetError()<<std::endl;
}
}
else std::cout<<"FATAL ERROR IN REBr::WINDOW::CONSTR_WINDOW: "<<SDL_GetError()<<std::endl;
if(console_verbose)
std::cout<<">done!"<<endl;
}
现在您可以看到我在该构造函数中有很多ifs。我真的不想要那个,因为这会减慢我的申请速度。我需要尽可能快地删除&#34;加载栏&#34; (这有助于我确定程序停止运行的功能)。
实现这一目标的最佳/最快方法是什么?
我系统中的每个人都在命名空间REBr
下答案 0 :(得分:1)
实现这一目标的一些变体:
if
。但是if
仍然会在代码中,所以它看起来有点笨重。无论如何,所有这些选项都需要程序重新编译。无需重新编译就无法达到最高速度。
答案 1 :(得分:0)
我经常使用支持调试级别的Logger类。电话可能如下:
logger->Log(debugLevel, "%s %s %d %d", timestamp, msg, value1, value2);
Logger类支持多个调试级别,因此我可以微调调试输出。这可以通过命令行或调试器随时设置。 Log语句使用与printf类似的可变长度参数列表。
答案 2 :(得分:0)
Google's logging module在业界广泛使用,并支持您可以从命令行设置的日志记录级别。例如(取自他们的文档)
VLOG(1) << "I'm printed when you run the program with --v=1 or higher";
VLOG(2) << "I'm printed when you run the program with --v=2 or higher";
您可以在此处找到代码https://github.com/google/glog以及doc/
文件夹中的文档。