История изменений
Исправление DarkEld3r, (текущая версия) :
Да ну
Ну да. Свойства - это не просто несколько булевских флажков (на самом деле, даже optional<bool>), хотя и их изрядно получается. Это ещё и ещё и цвет текста/бекграунда (и нет, цвет - это не тупо RGBA) и шрифт и много другой фигни.
Собственно, свойства между стилями тоже шарятся.
Два указателя или один указатель - не суть важно, всё равно в итоге памяти столько же потратится. Тем более, что в твоём примере теряется «не заданное» состояние. Будешь ещё в optional заворачивать? Молча получать пустое значение как раз нафиг не нужно.
И да, «выпячивать указатели» удобно - свойства могут задаваться на разных уровнях. В итоге резолвинг выглядит как-то так: берём дефолтные свойства и проходимся по «уровням» и если свойство имеется - заменяем.
Про CoW.
Редактирование - это отдельная большая тема. Хинт: совместное редактирование.
Исходная версия DarkEld3r, :
Да ну
Ну да. Свойства - это не просто несколько булевских флажков (на самом деле, даже optional<bool>), хотя и их изрядно получается. Это ещё и ещё и цвет текста/бекграунда (и нет, цвет - это не тупо RGBA) и шрифт и много другой фигни.
Собственно, свойства между стилями тоже шарятся.
Два указателя или один указатель - не суть важно, всё равно в итоге памяти столько же потратится. Тем более, что в твоём примере теряется «не заданное» состояние. Будешь ещё в optional заворачивать? Молча получать пустое значение как раз нафиг не нужно.
И да, «выпячивать указатели» удобно - свойства могут задаваться на разных уровнях. В итоге резолвинг выглядит как-то так: берём дефолтные свойства и проходимся по «уровням» и если свойство имеется - заменяем.