gpt4 book ai didi

c++ - 使控制台输出 "verbose"或不输出的最快方法

转载 作者:行者123 更新时间:2023-11-28 05:06:28 30 4
gpt4 key购买 nike

我正在制作一个小型系统,我希望能够在整个系统中切换“详细”文本输出。

我创建了一个名为 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;
}

现在如您所见,我在该构造函数中有很多 if。我真的不想那样,因为那会减慢我的申请速度。我需要它在不删除“加载栏”的情况下尽可能快(这有助于我确定程序停止运行的功能)。

完成此任务的最佳/最快方法是什么?


我系统中的所有内容都在命名空间 REBr 下

最佳答案

实现这一目标的一些变体:

  1. 使用一些记录器库。这是最好的选择,因为它为您提供了最大的灵 active 和一些有用的经验;)而且您不必设计一些东西。例如,查看 Google GLOG .
  2. 定义一些宏,允许您通过仅更改宏来打开/关闭所有这些日志。但要正确编写这样的宏并不是那么容易。
  3. 将您的条件标志标记为 constexpr。这样您就可以切换标志,并且根据其值,编译器将优化编译程序中的 if。但是 if 仍将在代码中,所以它看起来有点笨重。

无论如何,所有这些选项都需要重新编译程序。不重新编译是不可能达到最大速度的。

关于c++ - 使控制台输出 "verbose"或不输出的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631989/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com