使用引用变量或将它们作为函数参数发送
Using reference variables or send them as function parameters
我有下一个class:
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()
,但是场景 class 需要 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(...);
}
};
或者我应该在 class State
中创建一个 getter 并为 State
class 发送参考吗?
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,它会降低代码速度吗?
这取决于你的意图。如果您想在创建场景时知道的单个 window 上绘制,您可以使用传递给构造函数的变体。如果您想在 multiple/different windows 上绘制场景,或者您在创建场景时还不知道 window,请将 window 引用传递给 drawScene。 getter 似乎有点矫枉过正,但它不会减慢您的代码速度。
考虑到你给出的代码,我画图的时候会传window引用,每个场景都放window的引用好像没用。
我有下一个class:
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()
,但是场景 class 需要 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(...);
}
};
或者我应该在 class State
中创建一个 getter 并为 State
class 发送参考吗?
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,它会降低代码速度吗?
这取决于你的意图。如果您想在创建场景时知道的单个 window 上绘制,您可以使用传递给构造函数的变体。如果您想在 multiple/different windows 上绘制场景,或者您在创建场景时还不知道 window,请将 window 引用传递给 drawScene。 getter 似乎有点矫枉过正,但它不会减慢您的代码速度。
考虑到你给出的代码,我画图的时候会传window引用,每个场景都放window的引用好像没用。