只能由其他类创建的类,而无需使用朋友

A class that can only be created by another class, without using friend

本文关键字:朋友 其他 创建      更新时间:2023-10-16

我想拥有两个与非亲密和非朋友类,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是您的唯一朋友。