一个只能由另一个类创建的类,而不使用朋友

时间:2015-05-13 22:06:38

标签: c++ class

我希望有两个非继承相关和非朋友类,A类和B类。但是,我也希望B类只能由A类实例化,假设B类有私人构造函数。

是否有任何解决方法而无需使用模板?

1 个答案:

答案 0 :(得分:2)

不是拥有私人构造函数,而是可以使class B"私有"不要将它放在任何头文件中。

您可以使用 interface 类来实现此目的。

客户端程序员无法实例化 interface 类,因为它是纯虚拟的,并且无法实例化实现,因为它尚未声明。

实例化它的唯一方法是通过这样的工厂函数:

公共界面:

// 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是您唯一的朋友。