std :: rel_ops功能作为基类。这是合适的解决方案吗

时间:2010-10-14 08:16:05

标签: c++ templates comparison-operators

我已经将std :: rel_ops命名空间的功能实现为模板基类(它仅使用运算符<和==来定义所有比较运算符)。对我而言,它有点奇怪,它(到目前为止)正常工作,我也关注使用的'黑客'。任何人都可以评估以下代码并说我是否幸运能够工作,或者做这样的事情是标准做法。

template <typename T>
class RelationalOps {
public:

    inline bool operator!=(const T &rhs) const
    {
        const T& lhs = static_cast<const T&>(*this);
        return !(lhs == rhs);
    }

    inline bool operator<=(const T &rhs) const
    {
        const T& lhs = static_cast<const T&>(*this);
        return ((lhs < rhs) || (lhs == rhs));
    }

    inline bool operator>(const T &rhs) const
    {
        const T& lhs = static_cast<const T&>(*this);
        return !((lhs < rhs) || (lhs == rhs));
    }

    inline bool operator>=(const T &rhs) const
    {
        const T& lhs = static_cast<const T&>(*this);
        return !(lhs < rhs);
    }
};

1 个答案:

答案 0 :(得分:1)

那么,为什么不使用Boost.Operators