加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:21:10 所属栏目:百科 来源:网络整理
导读:我想在不使用setter的情况下在类中设置类的成员变量的值. 我的代码: class MyWindowSettings {public: const ofGLFWWindowSettings get(){ return settings; } int numSamples; bool resizable;private: ofGLFWWindowSettings settings;}; ofGLFWWindowSett
我想在不使用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)),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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读