2 Stimmen

Wie kann man private, nicht-virtuelle Methoden aus der Klassendefinition ausschließen?

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X