使用引用变量或给他们的功能参数
问题描述:
我隔壁班:使用引用变量或给他们的功能参数
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,它会减慢代码?
答
这取决于你的意图是什么。如果您想在创建场景时知道单个窗口,则可以使用传递给构造函数的变体。如果要在多个/不同窗口上绘制场景,或者在场景创建时尚未知道窗口,请将窗口引用传递给drawScene。吸气剂似乎有点矫枉过正,但它不会减慢你的代码。
考虑到您提供的代码,我将在绘制时传递窗口引用,在每个场景中引用窗口似乎没有用处。
只要做你喜欢的任何一个。吸气剂不会减慢你的程序。 –