我正在用C++编写一个库。我的库中有两个类,A
和B
。我希望隐藏A()
构造函数,使得任何引用我的库的代码都无法使用它。但是,我想让B
类能够调用A()
构造函数。
我来自C#背景,对C++了解不多。在C#中,我可以简单地将A()
构造函数声明为internal
。我读到说,在C++中最接近这样做的方式是结合friend
声明和前向声明。该如何实现呢?以下是我的三个文件:
A.h:
#pragma once
class A
{
private:
A();
};
B.h
#pragma once
class A;
class B
{
public:
A createA();
};
B.cpp:
#include "A.h"
#include "B.h"
A B::createA()
{
A result; //cannot access private member declare in class 'A'
return result;
}
我已经尝试将这个代码添加到A.h文件中:
public: friend A createA();
我尝试着在A.h中加入此内容,并进行相应的前向声明:
public: friend A B::createA();
我尝试在A.h中添加 extern class B;
,并将B设置为如下类:
public: friend class B;
我不知所措。
如果B::createA()
函数返回指向A
对象的指针比直接返回A
对象更容易,但在我的情况下这样行不通。我正在模拟一个封闭的API,而API调用返回A
对象而不是指针。
friend
。例如:friend A B::CreateA();
- Zac HowlandB
只有前向声明。而且你不能在A
之前定义B
,因为你从createA
返回它时已经需要A
。 - Daniel Frey