做全局变量的正确"C++方式"是什么?

Rol*_*lle 12 c++ oop design-patterns

我有一个主应用程序类,其中包含一个记录器,以及一些常规应用程序配置等.

现在我将显示许多GUI窗口等(将使用记录器和配置),我不想将记录器和配置传递给每个构造函数.

我已经看到了一些变体,比如在任何地方声明主类extern,但这并不是非常面向对象的.什么是使主类中的元素可供所有(或大多数)其他类访问的"标准"C++方法?

Bri*_*ndy 12

使用单例设计模式.

基本上,您返回一个对象的静态实例,并将其用于您的所有工作.

请参阅此链接,了解如何使用单例以及此stackoverflow链接,了解何时不应使用它

警告:单身模式涉及促进全球状态.全球国家有很多原因.
例如:单元测试.


Myk*_*yev 7

如果您的记录器和配置足够抽象,那么将记录器和配置传递给所有构造函数并不是一件坏事.

单身人士将来可能成为一个问题.但它在项目开始时就像是一个正确的选择.你的选择.如果您的项目足够小 - 请使用单身人士.如果不是 - 依赖注入.


Jas*_*ers 6

为什么不使用已经存在的系统?也就是说,将std :: clog重定向到输出到文件并写入std :: clog.

std::fstream *f = new std::fstream("./my_logfile.log")

std::clog.rdbuf(f->rdbuf());

std::clog << "Line of log information" << std::endl;
Run Code Online (Sandbox Code Playgroud)