Ich mache ein kleines Tower Defense Spiel, um C++ zu üben. Ich kenne andere Sprachen, habe aber in C++ wenig wirkliche Entwicklung gemacht. In diesem Spiel, das ich mehrere Gebäude haben werde, so habe ich eine Klasse wie folgt:Kann ein std :: function member auf andere Mitglieder zugreifen?
class Building
{
private:
sf::Sprite& sprite;
float timer = 0;
void update(float delta);
};
Jetzt werde ich viele verschiedene Gebäude haben, aber sie sollten alle die gleichen Mitglieder. Nun, in Java würde ich eine Unterklasse für jeden anderen Gebäudetyp machen (müssen), bu dachte ich, kann ich void update(float delta);
zu std::function<void(float)> update;
ändern und Fabrikfunktionen haben, um die verschiedenen Gebäude zu schaffen? Was ich mir vorstellen, ist so etwas wie dieses:
In building.h:
class Building
{
private:
sf::Sprite& sprite;
float timer = 0;
std::function<void(float)> update;
};
Und in building.cpp
Building getBuildingA()
{
Building b;
b.sprite = /* ... */
b.update = [](float delta) {
std::cout << timer++ << std::endl;
};
return b;
}
Aber natürlich kann ich nicht wirklich die variable Timer zugreifen dort. Kann ich etwas Ähnliches tun?
Durch die Aufnahme 'dieses'? – skypjack
Sie können eine Referenz nicht nach einer solchen Zuweisung initialisieren. Es muss in einer Initialisierungsliste initialisiert werden. – kfsone
Sie können das Datenschutzproblem umgehen, indem Sie getBuildingA zu einer statischen Elementfunktion von Building machen. – kfsone