我想在不使用 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;
然后内部的 ofGLFWWindowSettings
的 numSamples
和 resizable
应该立即设置为这些值。
是否有任何可能的解决方案可以在不使用 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/