可以说我有以下内容:
a.hpp:
class B;
class A
{
private:
std::unique_ptr<B> b_;
}
一个.cpp:
#include <something_complicated.hpp>
struct B
{
something_complicated x;
}
something_complicated& A::get_complicated() { return b_->x; }
不幸的是,在这种情况下,a.cpp 将无法编译,因为“get_complicated()”不是 A 的方法。
所以,我们可以试试这个:
a.hpp:
class B;
class A
{
private:
std::unique_ptr<B> b_;
something_complicated& A::get_complicated();
}
但随后 a.hpp 无法编译,因为 something_complicated 未定义。
如果它是一个类,我们可以转发声明 something_complicated,但它可能是一个 typedef,所以它已经过时了。
在不公开 b_ 或在 a.hpp 中包含 something_complicated.hpp 的情况下,我能想到的唯一方法如下:
一个.cpp:
#include <something_complicated.hpp>
struct B
{
something_complicated x;
}
#define get_complicated ((b_->x))
当然我不必定义一个宏来解决这个问题?有什么选择吗?