From 0b1f0bfe0d6cd7091b67eecbe736230b57b7c6c0 Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sat, 28 Jan 2017 17:43:16 +0100 Subject: [PATCH] Make Property use boost::variant --- src/curses/strbuffer.h | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/curses/strbuffer.h b/src/curses/strbuffer.h index 9c8ffb1..c5044d8 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; }; -- 2.11.4.GIT