使用引用变量或给他们的功能参数

使用引用变量或给他们的功能参数

问题描述:

我隔壁班:使用引用变量或给他们的功能参数

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

只要做你喜欢的任何一个。吸气剂不会减慢你的程序。 –

这取决于你的意图是什么。如果您想在创建场景时知道单个窗口,则可以使用传递给构造函数的变体。如果要在多个/不同窗口上绘制场景,或者在场景创建时尚未知道窗口,请将窗口引用传递给drawScene。吸气剂似乎有点矫枉过正,但它不会减慢你的代码。

考虑到您提供的代码,我将在绘制时传递窗口引用,在每个场景中引用窗口似乎没有用处。