阻止 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(); }
这不是“微力不行”,而是“一不小心不行”。
动机
假设我有一个 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(); }
这不是“微力不行”,而是“一不小心不行”。