2016-04-28 64 views
0

我隔壁班:使用引用變量或給他們的功能參數

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; 
}; 

在繪製函數我遍歷向量m_scenes和調用函數drawScene(),但現場類需要sf::RenderWindow以畫。

創建新場景時,我應該發送mWindow嗎?

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

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

或者作爲參數發送mWindow會更好嗎?

class Scene { 
public: 
    Scene() {} 

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

或者我應該在類中創建State一個getter和發送的State類的引用?

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; 
}; 

如果我使用一個getter,它會減慢代碼?

+0

只要做你喜歡的任何一個。吸氣劑不會減慢你的程序。 –

回答

0

這取決於你的意圖是什麼。如果您想在創建場景時知道單個窗口,則可以使用傳遞給構造函數的變體。如果要在多個/不同窗口上繪製場景,或者在場景創建時尚未知道窗口,請將窗口引用傳遞給drawScene。吸氣劑似乎有點矯枉過正,但它不會減慢你的代碼。

考慮到您提供的代碼,我將在繪製時傳遞窗口引用,在每個場景中引用窗口似乎沒有用處。