【发布时间】:2013-01-23 06:30:19
【问题描述】:
如何从== 和< 获取运算符>、>=、<= 和!=?
标准头<utility>定义了一个命名空间std::rel_ops,它根据运算符==和<定义了上述运算符,但我不知道如何使用它(哄我的代码使用这样的定义为:
std::sort(v.begin(), v.end(), std::greater<MyType>);
我定义了非成员运算符的地方:
bool operator < (const MyType & lhs, const MyType & rhs);
bool operator == (const MyType & lhs, const MyType & rhs);
如果我 #include <utility> 并指定 using namespace std::rel_ops;,编译器仍然会抱怨 binary '>' : no operator found which takes a left-hand operand of type 'MyType'..
【问题讨论】:
-
“编译器,请使用 std::rel_ops for MyType”怎么说?
-
我不知道。也许有一些
usingdeclarations 所以它被 ADL 拾取...自己写这些更容易,或者如果你很懒,你可以利用Boost.Operators -
嗯,这个编辑大大改变了问题。
-
也许问题是我缺少的是 ADL。因为我的运营商是非会员..
标签: c++ templates c++11 visual-studio-2012