次のようなものがあるとしましょう:
a.hpp:
class B;
class A
{
private:
std::unique_ptr<B> b_;
}
a.cpp:
#include <something_complicated.hpp>
struct B
{
something_complicated x;
}
something_complicated& A::get_complicated() { return b_->x; }
残念ながら、この場合、「get_complicated()」は A のメソッドではないため、a.cpp はコンパイルに失敗します。
したがって、これを試すことができます:
a.hpp:
class B;
class A
{
private:
std::unique_ptr<B> b_;
something_complicated& A::get_complicated();
}
しかし、something_complicated が定義されていないため、a.hpp はコンパイルに失敗します。
クラスの場合は something_complicited を前方宣言できますが、おそらく typedef であるため、それはできません。
b_ public を作成せず、a.hpp に something_complicited.hpp を含めずにこれを行う唯一の方法は次のとおりです。
a.cpp:
#include <something_complicated.hpp>
struct B
{
something_complicated x;
}
#define get_complicated ((b_->x))
この問題を回避するためにマクロを定義する必要はありませんか? 代替案はありますか?