2016-04-28 15 views
0

ich die nächste Klasse:Mit Bezugsgrößen oder sie senden als Funktionsparameter

class State { 
public: 
    State(StateMachine& machine, sf::RenderWindow& window) 
     : mMachine { machine } 
     , mWindow { window } { } 

    void draw(); 
protected: 
    StateMachine&  mMachine; 
    sf::RenderWindow& mWindow; 

    std::vector<std::unique_ptr<Scene>> m_scenes; 
}; 

In der Auslosung Funktion ich den Vektor m_scenes und rufen Sie die Funktion drawScene() laufen, aber die Szene Klasse brauchen eine sf::RenderWindow, um zeichnen.

Sollte ich die mWindow beim Erstellen einer neuen Szene senden?

class Scene { 
public: 
    Scene(sf::RenderWindow& window) 
     : mWindow { window } { } 

    void drawScene() { 
     mWindow.draw(...); 
    } 
protected: 
    sf::RenderWindow& mWindow; 
}; 

Oder wäre es besser, die mWindow als Paramater zu schicken?

class Scene { 
public: 
    Scene() {} 

    void drawScene(sf::RenderWindow& window) { 
     window.draw(...); 
    } 
}; 

Oder sollte ich eine Getter in der Klasse State und eine Referenz für die State Klasse schicken?

class State { 
public: 
    State(...); 

    sf::RenderWindow& getWindow() { return mWindow; } 
}; 

class Scene { 
public: 
    Scene(State& state) 
     : mState { state } {} 

    void drawScene() { 
     mState.getWindow().draw(...); 
    } 
protected: 
    State& mState; 
}; 

Und wenn ich einen Getter verwende, wird es den Code verlangsamen?

+0

Tun Sie einfach, was Sie bevorzugen. Ein Getter wird Ihr Programm nicht verlangsamen. –

Antwort

0

Es hängt davon ab, was Ihre Absicht ist. Wenn Sie auf ein einzelnes Fenster zeichnen möchten, das Sie kennen, wenn die Szene erstellt wird, können Sie die Übergabe an Konstruktorvariante verwenden. Wenn Sie eine Szene in mehreren/verschiedenen Fenstern zeichnen möchten oder das Fenster bei der Szenenerstellung noch nicht kennen, übergeben Sie die Fensterreferenz an drawScene. Der Getter scheint etwas übertrieben zu sein, wird aber den Code nicht verlangsamen.

In Anbetracht, welchen Code Sie präsentierten, würde ich die Fensterreferenz beim Zeichnen übergeben, es scheint nutzlos, Verweise auf das Fenster in jeder Szene zu setzen.

Verwandte Themen