最好是什么(如果有)?

变体A(巴顿·纳克曼):

template<class T>
struct equal_comparable {
    friend bool operator == (const T & t1, const T & t2) {
        return t1.equalTo (t2);
    }
};

class MyClass : private equal_comparable<MyClass> {
    bool equalTo (const MyClass & other)  //...
};

变体B(std::enable_if):
struct MyClass {
    static const bool use_my_equal = true;
    bool equalTo (const MyClass & other) //...
};

template<class T>
typename std::enable_if<
    T::use_my_equal,
    bool
>::type
operator == (const T & t1, const T & t2) { return t1.equalTo (t2); }

最佳答案

我更喜欢使用@SteveJessop在评论中提到的Boost.Operators,它可以正式化和自动化您的第一种方法。如果您碰巧需要多组运算符(因此将需要多个继承),它们还将处理空基优化。因为这些基类就位于类接口(interface)的最前面,所以节省的并不是键入,而是代码文档/执行值。从这个意义上讲,这是概念的原始方式。

08-03 23:07
查看更多