Довольно элегантное решение для читабельной, одношаговой инициализации сложных структур данных в C++:
http://gerardmeier.com/foreign-constructors-cpp
В кратце:
struct Font {
...
// The foreign constructor.
Font(std::function visit) {
visit(*this);
}
};
class Button {
const Font font = Font([] (Font& font) {
font.weight = Weight::VeryBold;
font.slant = Slang::Oblique;
font.halign = Anchor::Left;
});
};
Единственное что мне не нравится, доступа к protected/private полям класса без сеттеров уже не получить, что делает подобный подход чуть менее читабельным.