只能由其他类创建的类,而无需使用朋友
A class that can only be created by another class, without using friend
我想拥有两个与非亲密和非朋友类,A类和级。但是,我还希望B类只能通过A类实例化,假设B类具有私人构造函数。
有没有使用模板的方法?
而不是拥有私有构造函数,您可以通过不将其放置在任何标头文件中来制作class B
"私有"。
您可以使用接口类实现此目的。
客户端程序员无法实例化接口类,因为它是纯虚拟的,并且无法实例化,因为它没有被声明。
实例化的唯一方法是通过这样的工厂功能:
公共接口:
// classes.h
// pure virtual interface
struct B
{
virtual ~B() {}
virtual void func_1() = 0;
virtual void func_2() = 0;
};
class A
{
public:
// factory method
B* create_B();
};
"私人"实现:
// classes.cpp
#include "classes.h"
// the *actual* class B
class B_Implementation
: public B
{
public:
void func_1() override
{
// do stuff
}
void func_2() override
{
// do stuff
}
};
B* A::create_B()
{
return new B_Implementation;
}
用法:
int main()
{
A a;
auto b = std::unique_ptr<B>(a.create_B());
}
如果此方法不适合您的情况,则friend
是您的唯一朋友。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- UE4在OnComponentBeginOverlap上铸造其他actor
- 在这种情况下,我们可以使用静态而不是朋友吗,还有其他解决方案是什么
- 作为其他班级的朋友的私人功能
- 只能由其他类创建的类,而无需使用朋友
- 朋友拥有自己的类模板和其他模板参数
- 模板类构造函数作为其他模板类的朋友
- 在没有朋友c++的情况下访问其他类的私有数据