diff --git a/src/curses/strbuffer.h b/src/curses/strbuffer.h index 9c8ffb18..c5044d8c 100644 --- a/src/curses/strbuffer.h +++ b/src/curses/strbuffer.h @@ -22,6 +22,7 @@ #define NCMPCPP_STRBUFFER_H #include +#include #include #include "window.h" @@ -33,34 +34,21 @@ template class BasicBuffer { struct Property { - enum class Type { Color, Format }; - - Property(NC::Color color_, size_t id_) - : m_type(Type::Color), m_color(std::move(color_)), m_id(id_) { } - Property(NC::Format format_, size_t id_) - : m_type(Type::Format), m_format(format_), m_id(id_) { } + template + Property(ArgT &&arg, size_t id_) + : m_impl(std::forward(arg)), m_id(id_) { } size_t id() const { return m_id; } template friend OutputStreamT &operator<<(OutputStreamT &os, const Property &p) { - switch (p.m_type) - { - case Type::Color: - os << p.m_color; - break; - case Type::Format: - os << p.m_format; - break; - } + boost::apply_visitor([&os](const auto &v) { os << v; }, p.m_impl); return os; } private: - Type m_type; - Color m_color; - Format m_format; + boost::variant m_impl; size_t m_id; };