Nehmen wir an, ich habe etwas wie das Folgende:
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; }
In diesem Fall kann a.cpp leider nicht kompiliert werden, da "get_complicated()" keine Methode von A ist.
Wir können also Folgendes versuchen:
a.hpp:
class B;
class A
{
private:
std::unique_ptr<B> b_;
something_complicated& A::get_complicated();
}
Aber dann kann a.hpp nicht kompiliert werden, weil something_complicated nicht definiert ist.
Wir könnten etwas_kompliziert weiterdeklarieren, wenn es eine Klasse ist, aber es ist wahrscheinlich ein typedef, also ist das nicht möglich.
Der einzige Weg, den ich mir vorstellen kann, ohne b_ öffentlich zu machen oder something_complicated.hpp in a.hpp einzubinden, ist der folgende:
a.cpp:
#include <something_complicated.hpp>
struct B
{
something_complicated x;
}
#define get_complicated ((b_->x))
Muss ich nicht ein Makro definieren, um dieses Problem zu umgehen? Gibt es Alternativen?