当前位置 : 主页 > 编程语言 > c++ >

c – 如何在没有setter的情况下在类中设置类的成员变量?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我想在不使用setter的情况下在类中设置类的成员变量的值. 我的代码: class MyWindowSettings {public: const ofGLFWWindowSettings get(){ return settings; } int numSamples; bool resizable;private: ofGLFWWindowSettings s
我想在不使用setter的情况下在类中设置类的成员变量的值.

我的代码:

class MyWindowSettings {

public:

    const ofGLFWWindowSettings& get(){
        return settings;
    }
    int numSamples;
    bool resizable;

private:
    ofGLFWWindowSettings settings;
};

ofGLFWWindowSettings也有公共成员变量

int numSamples;
bool resizable;

我希望能够在不使用setter的情况下设置这些变量的值.

我希望能够..例如,

MyWindowSettings settings;
settings.numSamples = 8;
settings.resizable = true;

然后,应立即将GLFWWindowSettings的numSamples和resizable的内部设置为这些值.

有没有可能的解决方案来实现这一点,而不使用setter或继承GLFWWindowSettings?

是的,有几个选项,与您喜欢的语法具有不同的相似性.

选项1 – 成员参考

class MyWindowSettings {

public:
    MyWindowSettings()
      : numSamples(settings.numSamples),
        resizable(settings.resizable)
    {}

    ~MyWindowSettings() = default;

    MyWindowSettings(const MyWindowSettings & other)
      : settings(other.settings),
        numSamples(settings.numSamples),
        resizable(settings.resizable)
    {}

    MyWindowSettings& operator=(const MyWindowSettings & other)
    {
        settings = other.settings;
        return *this;
    }

    MyWindowSettings(MyWindowSettings && other)
      : settings(std::move(other.settings)),
        numSamples(settings.numSamples),
        resizable(settings.resizable)
    {}

    MyWindowSettings& operator=(MyWindowSettings && other)
    {
        settings = std::move(other.settings);
        return *this;
    }

    const ofGLFWWindowSettings& get(){
        return settings;
    }
    int & numSamples;
    bool & resizable;

private:
    ofGLFWWindowSettings settings;
};

优点:

>正是您想要的语法.

缺点:

>非常详细的定义.容易错过某处的错误.

选项2 – 公开GLFWWindowSettings

class MyWindowSettings {   
public:
    ofGLFWWindowSettings settings;
};

优点:

>非常简洁
>你也不需要forGLFWWindowSettings的getter

缺点:

>语法不完全相同

我个人更喜欢这个,假设MyWindowSettings的其他成员没有显示.

MyWindowSettings settings;
settings.settings.numSamples = 8;
settings.settings.resizable = true;

选项3 – 没有MyWindowSettings

只需直接使用GLFWWindowSettings即可

选项3.a – 别名定义

using MyWindowSettings = ofGLFWWindowSettings;
网友评论