boost的operator操作符

// operators.cpp : 定义控制台应用程序的入口点。
//made by davidsu33
//2014-6-8 18:40


#include "stdafx.h"
#include <utility>
#include <cassert>
#include <boost/operators.hpp>


using namespace std;
//utility中提供的rel_ops,操作符之间的转换
//通过实现<和==操作来完成> ! >= <=的操作


struct Point
{
int x,y;
};


bool operator==(const Point& l, const Point& r)
{
return (l.x==r.x) && (l.y==r.y);
}


bool operator<(const Point& l, const Point& r)
{
if (l.x != r.x)
{
return l.x < r.x;
}


return l.y < r.y;
}


void use_rel_ops()
{
//上述对于Point的操作仅实现了==操作符和<操作符
using namespace std::rel_ops;//****必须要加上该命名空间,否则编译不过


Point p1, p2;
p1.x = 2, p1.y = 3, p2.x=2, p2.y=3;
assert(p1 >= p2);
assert(p1 <= p2);


p1.x = 4;
assert(p1 > p2);


assert(p1 != p2);


p1.x = p2.x;
assert(p1 == p2);
}


template<class T>
class Point2D : public boost::less_than_comparable1<Point2D<T>, boost::addable<Point2D<T>>>
{
public:
bool operator<(const Point2D<T>& r) const;
Point2D<T>& operator+=(const Point2D<T>& r);
T length() const;
void setX(const T& rx){x = rx;}
void setY(const T& ry){y = ry;}
T getX() const {return x;}
T getY() const {return y;}
private:
T x,y;
};


template<class T>
Point2D<T>& Point2D<T>::operator+=( const Point2D<T>& r )
{
x += r.x;
y += r.y;
return (*this);
}


template<class T>
T Point2D<T>::length() const
{
return (x*x+y*y);
}


template<class T>
bool Point2D<T>::operator<( const Point2D<T>& r ) const
{
return length() < r.length();
}


int _tmain(int argc, _TCHAR* argv[])
{
use_rel_ops();


Point2D<double> d1, d2, d3;
d1.setX(10);
d1.setY(10);


assert(d2 > d1);
assert(d2 >= d1);
assert(d1 <= d2);


d2.setX(20), d2.setY(20);


d3 = d1 + d2;
d3 += d3;
assert(d3.getX()  == 60 && d3.getY() == 60);


return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值