我有一个使用枚举的模板
template<typename T> class Enumuzaorous : public someclass<T>
{
public:
virtual ~Enumuzaorous() { } ;
virtual void do_this() { ... }
virtual void take_that() { ... }
virtual bool check_something() { return false; }
T m_value;
}
我有很多使用这个类的枚举和一个枚举:
enum myLovelyEnum
{
today,tomorrow
}
对于这个枚举,我希望check_something不会返回false,但执行以下操作:
bool check_something() { return m_value == today; }
我可以将整个类专门用于枚举,但我需要复制并粘贴以下的实现:
void do_this() { ... }
void take_that() { ... }
是否可以只专注一个成员函数?我猜不是。
也许我应该继承然后专攻?
什么是正确的方法。 也许我可以从专业的do_this打电话,把它拿到通用的那个?
感谢。
答案 0 :(得分:3)
类模板的成员函数本身就是函数模板,可以明确专门化:
template <>
bool Enumuzaorous<myLovelyEnum>::check_something()
{
return m_value == today;
}
答案 1 :(得分:0)
另一种解决方案可以是使用特征类
template <typename T> struct DefaultEnumuzaorousTraits
{
constexpr static bool check_something_impl(T&) { return false; }
};
template<typename T, class Traits = DefaultEnumuzaorousTraits<T>>
class Enumuzaorous : public someclass<T>
{
// stuff omitted for brevity
bool check_something() { return Traits::check_something_impl(m_value); }
};
struct DefaultEnumuzaorousTraits<myLovelyEnum>
{
constexpr static bool check_something_impl(myLovelyEnum e)
{ return e == myLovelyEnum::today; }
}