fre*_*low 17 c++ boost operator-overloading operators
boost::operators自动定义+基于手动实现的运算符+=,这非常有用.要生成这些运算符T,可以从boost::operators<T>boost示例中继承:
class MyInt : boost::operators<MyInt>
我熟悉CRTP模式,但我没看到它在这里是如何工作的.具体来说,我并没有真正继承任何设施,因为运营商不是会员.boost::operators似乎完全是空的,但我不太擅长阅读提升源代码.
任何人都可以解释这是如何工作的细节?这种机制是众所周知并广泛使用的吗?
Joe*_*oeG 15
有一个很大的多继承链,其顶部有许多实现运算符的类,但是作为friend函数执行,因此将它们放在封闭的命名空间中而不是作为类的成员.
例如,最终的实现operator+变为:
template <class T, class U, class B = ::boost::detail::empty_base<T> >
struct addable2 : B
{
friend T operator +( T lhs, const U& rhs ) { return lhs += rhs; }
friend T operator +( const U& lhs, T rhs ) { return rhs += lhs; }
};
Run Code Online (Sandbox Code Playgroud)