首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >boost运算符是如何工作的?

boost运算符是如何工作的?
EN

Stack Overflow用户
提问于 2010-06-02 21:30:20
回答 1查看 2.7K关注 0票数 18

boost::operators基于像+=这样的手动实现自动定义像+这样的运算符,这非常有用。要为T生成这些运算符,需要继承boost::operators<T>,如boost示例所示:

class MyInt : boost::operators<MyInt>

我熟悉CRTP模式,但我看不出它在这里是如何工作的。具体地说,我并没有真正继承任何工具,因为运算符不是成员。boost::operators似乎完全是空的,但我不太擅长阅读boost源代码。

有人能详细解释一下这是如何工作的吗?这个机制是否广为人知和广泛使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-02 21:50:36

有一个很大的多重继承链,在链的顶部有许多实现运算符的类,但它们是作为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; }
};
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2958142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档