Да, есть несколько вариантов, с различной степенью сходства с синтаксисом, который вы предпочитаете.
Вариант 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;
};
Pro:
- Именно тот синтаксис, который вы хотите.
Con:
- Очень подробное определение. Легко пропустить ошибку где-то там.
Вариант 2 - общедоступный ofGLFWWindowSettings
class MyWindowSettings {
public:
ofGLFWWindowSettings settings;
};
Pro:
- Очень лаконично
- Вам не нужен геттер для
ofGLFWWindowSettings
тоже
Con:
- Не совсем такой же синтаксис
Лично я предпочитаю это, при условии, что есть другие члены MyWindowSettings
, которые не показаны.
MyWindowSettings settings;
settings.settings.numSamples = 8;
settings.settings.resizable = true;
Вариант 3 - Нет MyWindowSettings
Просто используйте ofGLFWWindowSettings
напрямую вместо
Вариант 3.a - определение псевдонима
using MyWindowSettings = ofGLFWWindowSettings;