阻止 class A 创建 class B 的实例

Prevent class A from creating an instance of class B

动机

假设我有一个 class Logger,许多 classes/projects 使用它来处理日志消息。

现在,我正在实施新的 class MyProcessor不能 按原样使用 class Logger。它需要在内部更改一些 Logger 成员以使 Logger 能够按预期工作。

我的做法

我生成一个新的 class MyLogger extends class Logger 并在所有正确的地方添加特定代码.

现在,class MyProcessor 可以创建 class MyLogger 的实例 s 并享受正确的功能

问题

一位新成员加入了我的团队,需要向 class MyProcessor 添加代码。他不知道classLogger不能直接在classMyProcessor

中使用的限制

解决方案

让我们在编译时防止这种情况发生:确保 class MyProcessor 永远不会创建 class Logger.

的实例

备注

我知道还有其他方法可以解决我的问题(例如,使 Logger 成为抽象 class 并且每个派生 class 实现一组虚函数)。 但是,我更感兴趣的是具体解决这个问题,而不是不同的方法。

class Logger {};

class MyProcessor
{
private:
    // If you get a compilation error using this, consult the lead.
    class Logger { Logger() = delete; };

public:
    void foo() { Logger nah; }
};

auto main() -> int { MyProcessor(); }

这不是“微力不行”,而是“一不小心不行”。