如何在单独的类中访问私有构造函数?

use*_*861 8 c++ internal friend forward-declaration

我正在用C++编写一个库.我的图书馆里有两门课,A而且B.我想隐藏A()任何引用我的库的代码中的构造函数.我也希望类B能够调用A()构造函数.

我来自C#背景,并且很少记住我的C++.在C#中,我只是将A()构造函数声明为internal.我已经读过,在C++中最接近的方法是friend声明和前向声明的组合.我该怎么做呢?以下是我的三个文件:

啊:

#pragma once
class A
{
    private:
        A();
};
Run Code Online (Sandbox Code Playgroud)

BH

#pragma once
class A;
class B
{
    public:
        A createA();
};
Run Code Online (Sandbox Code Playgroud)

B.cpp:

#include "A.h"
#include "B.h"

A B::createA()
{
    A result; //cannot access private member declare in class 'A'
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我试过把它添加到啊:

public: friend A createA();
Run Code Online (Sandbox Code Playgroud)

我反而尝试将此添加到Ah并带有相应的前向声明:

public: friend A B::createA();
Run Code Online (Sandbox Code Playgroud)

我反而尝试添加和extern class B;Ah并使B成为这样的类:

public: friend class B;
Run Code Online (Sandbox Code Playgroud)

我不知所措.

我认为如果我让B::createA()函数返回指向A对象而不是A直接对象的指针,这可能会更容易,但在我的情况下这不会做.我正在模拟一个封闭的API,API调用返回一个A对象而不是一个指针.

Dan*_*rey 5

您可能只需要从第三次尝试中删除“extern”即可将其转换为适当的前向声明。尝试:

啊:

#pragma once
class B;
class A
{
    friend class B;
private:
    A();
};
Run Code Online (Sandbox Code Playgroud)