是什么让你觉得它应该是?那些可以根据需要实例化的常规非静态类呢?然后将其中的一个静态实例用作默认记录器.通过这种方式,您可以获得两全其美:方便的全局访问记录器以及测试它或临时使用不同记录器的能力.
另一个建议是简单地创建一个单独的实例,并将其作为参数传递给您的类的每个组件,如@disown所示.
但是如果你让这个课程本身是静态的或是一个单身人士,你只是在自己的脚下射击.
编辑
示例,以回应@ Stephen的评论:
// define a logger class, a perfectly ordinary class, not a singleton, and without all static members
class Logger {
// ....
};
// create a single global *instance* of this class
Logger defaultLog;
void foo() {
// and now use the globally visible instance
defaultLog.Log("hello");
// or create a new one if that's what we need:
Logger newlog;
newlog.Log("hello");
}
Run Code Online (Sandbox Code Playgroud)
没有魔力.这正是标准库的功能.std::cout不是单身人士.它只是一个类的全局实例std::ostream,一个类也可以在需要时正常实例化.
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |