我有下一堂课:
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()
,但是Scene类需要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。吸气剂似乎有点矫枉过正,但它不会减慢你的代码。
考虑到你提供的代码,我会在绘图时传递窗口参考,在每个场景中放置对窗口的引用似乎毫无用处。