使用 STL utility.h 重载运算符

Posted

技术标签:

【中文标题】使用 STL utility.h 重载运算符【英文标题】:Overloading operator by using STL utility.h 【发布时间】:2012-07-27 12:40:03 【问题描述】:

在我的代码中,我遇到了 37 个相同类型的错误 c2678; binary 'operator' : 没有定义接受 'type' 类型左侧操作数的运算符(或者没有可接受的转换)

我试图通过重载 == 运算符,包括 STL“实用程序”来消除错误。 http://msdn.microsoft.com/en-us/library/86s69hwc(v=vs.80).aspx http://en.wikibooks.org/wiki/C%2B%2B_Programming/Operators/Operator_Overloading

但这仍然不起作用。任何帮助表示赞赏。

【问题讨论】:

如何包含标头应该为您的类型重载运算符? 我们至少需要看到正在破坏的代码。 @yurikilochek:见<boost/operators.hpp> @BoBTFish 这样吗?包含此标头不会神奇地为您的操作员提供重载。你必须从 boost::operators 继承,即使那样你也必须提供基本的,以便其他的可以按照他们的方式实现。 【参考方案1】:

该标头为某些标准类型提供了operator== 的重载,但它不会为您自己的类型神奇地重载它。如果您希望您的类型是相等可比的,那么您必须自己重载运算符,例如:

bool operator==(my_type const & a, my_type const & b) 
    return a.something == b.something
        && a.something_else == b.something_else;


// You'll probably want this as well
bool operator!=(my_type const & a, my_type const & b) 
    return !(a == b);

【讨论】:

以上是关于使用 STL utility.h 重载运算符的主要内容,如果未能解决你的问题,请参考以下文章

C ++ STL列表运算符重载对(根据第一个值排序,使用第二个值访问)

STL详解—— list的模拟实现

ACM之运算符重载结合STL

STL 结构体内重载 一个比较运算符

STL中sort排序算法第三个参数_Compare的实现本质

C++:使用类|| 运算符重载友元