c++ - 如何在没有setter的情况下设置类内部类的成员变量?

标签 c++ class variables

我想在不使用 setter 的情况下在类内部设置类的成员变量的值。

我的代码:

class MyWindowSettings {

public:

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

private:
    ofGLFWWindowSettings settings;
};

ofGLFWWindowSettings 也有公共(public)成员变量是

int numSamples;
bool resizable;

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

我希望能够……例如,

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

然后内部的 ofGLFWWindowSettingsnumSamplesresizable 应该立即设置为这些值。

是否有任何可能的解决方案可以在不使用 setter 或继承 ofGLFWWindowSettings 的情况下实现这一点?

最佳答案

是的,有几个选项,与您喜欢的语法有不同程度的相似性。

选项 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 - 公共(public) ofGLFWWindowSettings

class MyWindowSettings {   
public:
    ofGLFWWindowSettings settings;
};

专业人士:

  • 非常简洁
  • 您也不需要 ofGLFWWindowSettings 的 getter

缺点:

  • 语法不完全相同

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

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

选项 3 - 无 MyWindowSettings

直接使用ofGLFWWindowSettings即可

选项 3.a - 别名定义

 using MyWindowSettings = ofGLFWWindowSettings;

关于c++ - 如何在没有setter的情况下设置类内部类的成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51154384/

相关文章:

javascript - 无法清除 JavaScript 中按钮的变量输入

javascript - 在 javascript 中打印提示变量返回 "NaN"

c++ - 调试嵌入式 Lua 5.2.2 代码

c++ - ffmpeg 问题

Python多个类调用特定类时出错

在 div 内部时,jQuery 滚动无法正常工作

C++ vector<vector<int>> 开头保留大小

c++ - 并行将 64 位整数中的压缩 8 位整数减去 1,SWAR 无需硬件 SIMD

java - 具有数组类型的 getClass 方法 Java

java - 如果变量没有数据尝试另一个?