阻止类A创建类B的实例
Prevent class A from creating an instance of class B
动机
假设我有一个类Logger
,它被许多类/项目用来处理日志消息。
现在,我正在实现一个新的类MyProcessor
,不能按原样使用类Logger
。它需要在内部更改一些Logger
成员,Logger
才能按预期工作。
我的方法
我生成了一个新的类MyLogger
,扩展了类Logger
,并在所有正确的位置添加了特定的代码。
现在,类MyProcessor
可以创建类MyLogger
的实例s并享受正确的功能
问题
一个新成员加入了我的团队,需要向类MyProcessor
添加代码。他不知道Logger
类不能直接用于MyProcessor
类的限制
解决方案
让我们在编译时防止这种情况:确保类MyProcessor
永远不会创建类Logger
的实例。
备注
我知道还有其他方法可以解决我的问题(例如,使Logger
成为一个抽象类,每个派生类实现一组虚拟函数(。然而,我更感兴趣的是具体解决这个问题,而不是采用不同的方法。
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(); }
这不是";付出一点小小的努力都做不到";,但是";不能不经意间";。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 在C++中为链表类创建实例
- 如何为类的每个实例创建特定实例的方法
- 基于现有实例创建类的新实例
- 从模板类的另一个实例创建模板类的实例时省略模板参数
- Vulkan-加载扩展时实例创建失败
- 通知B1或B2或B3类的特定实例创建Pointer A类
- 使用std::shared_ptr对象实例创建boost::线程
- 如何在C++中仅包含一个实例创建类
- 如何从旧实例创建新实例
- 在V8 javascript引擎中,如何为每个实例创建一个重新使用ObjectTemplate的构造函数
- 有没有一种方法可以从基本实例创建派生实例
- 如何在修改设计时停止现有代码基类的实例创建
- 使用基类实例创建派生类实例
- 如何从另一个仅静态选择满足特定类型规则的索引的元组实例创建元组实例