【发布时间】:2013-09-13 07:40:11
【问题描述】:
我正在用 C++ 编写一个库。我的图书馆有两个课程,A 和 B。我想从任何引用我的库的代码中隐藏 A() 构造函数。我还希望 B 类能够调用 A() 构造函数。
我来自 C# 背景,几乎不记得我的 C++。在 C# 中,我只需将 A() 构造函数声明为 internal。我读过在 C++ 中最接近的方法是 friend 声明和前向声明的组合。我该怎么做呢?以下是我的三个文件:
啊哈:
#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();
我尝试将和 extern class B; 添加到 A.h 并使 B 成为这样的类:
public: friend class B;
我很茫然。
我认为如果我让B::createA() 函数直接返回指向A 对象而不是A 对象的指针,这可能会更容易,但在我的情况下不会这样做。我正在模拟一个封闭的 API,API 调用返回一个 A 对象而不是一个指针。
【问题讨论】:
标签: c++ friend internal forward-declaration