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;
};优点: >非常简洁 缺点: >语法不完全相同 我个人更喜欢这个,假设MyWindowSettings的其他成员没有显示. MyWindowSettings settings; settings.settings.numSamples = 8; settings.settings.resizable = true; 选项3 – 没有MyWindowSettings 只需直接使用GLFWWindowSettings即可 选项3.a – 别名定义 using MyWindowSettings = ofGLFWWindowSettings; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
