本文為 C++ Software Design 書的第 27 節內容。
Mixin classes 的目的是讓一個類別能注入我們想要的操作,通常利用 CRTP 來實作。比如說若想要讓一個類別能相加,則實作 Addable 類別:struct Addable { friend Derived& operator+=(Derived& lhs, Derived const& rhs) { lhs.get() += rhs.get(); return lhs; } friend Derive operator+(Derived const& lhs, Derived const& rhs) { return Derived{lhs.get() + rhs.get()}; } }; template<typename T, typename Tag> struct StrongType : private Addable<StrongType<T, Tag>> {};而當需要多個 mixin 時則可用以下方式實作:
template<typename T, typename Tag, template<typename> class... Skills> struct StrongType : private Skills< StrongType<T, Tag, Skills...> >... {}; // Use mixin classes template<typename T> using Meter = StrongType<T, struct MeterTag, Addable, Printable>; using Surname = StrongType<std::string, struct SurnameTag, Printable>;以上的例子展示了只用一個 mixin 或兩個 mixin 類別的方法。
沒有留言:
張貼留言