Sto codificando un visualizzatore di algoritmi di grafi. Ogni vertice del grafico ha uno stile (colore, dimensioni, ecc.). Finché l'algoritmo non ha fatto nulla per un vertice, quel vertice ha uno stile predefinito . Lo stile predefinito deve essere configurabile in fase di esecuzione.
Mi è venuta in mente la seguente soluzione basata sullo schema del singleton, che mi sembra un po 'imbarazzante (come indicato nel commento). C'è uno migliore?
struct Style {
int color;
// size etc. are skipped for brevity
};
// Changeable default style
struct DefaultStyle {
static DefaultStyle &instance() {
static DefaultStyle res;
return res;
}
DefaultStyle() = default;
DefaultStyle(DefaultStyle const &) = delete;
void operator=(DefaultStyle const &) = delete;
Style s{5};
// didn't see a benefit in making it private,
// since I would need to provide get() and set() anyways.
};
int main()
{
auto &s = DefaultStyle::instance().s;
// this need to access the style indirectly (.s) seems awkward
s.color = 10;
std::cout << DefaultStyle::instance().s.color << std::endl;
// the change is globally visible
return 0;
}