使用引用变量或将它们作为函数参数发送

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的引用好像没用。