c – 三元比较运算符重载
作者:互联网
如何实现三元比较运算符以确定例如<的布尔值. b< C?
解决方法:
解:
在对比较进行编码时,将返回类型作为可以链接其他比较的比较对象,但可以隐式转换为bool.这甚至可以(类型)使用未使用此意图编码的类型,只需手动将它们转换为比较类型即可.
执行:
template<class T>
class comparison {
const bool result;
const T& last;
public:
comparison(const T& l, bool r=true) :result(r), last(l) {}
operator bool() const {return result;}
comparison operator<(const T& rhs) const {return comparison(rhs, (result && last<rhs));}
comparison operator<=(const T& rhs) const {return comparison(rhs, (result && last<=rhs));}
comparison operator>(const T& rhs) const {return comparison(rhs, (result && last>rhs));}
comparison operator>=(const T& rhs) const {return comparison(rhs, (result && last>=rhs));}
};
一个有用的例子:
#include <iostream>
int main() {
//testing of chained comparisons with int
std::cout << (comparison<int>(0) < 1 < 2) << '\n';
std::cout << (comparison<int>(0) < 1 > 2) << '\n';
std::cout << (comparison<int>(0) > 1 < 2) << '\n';
std::cout << (comparison<int>(0) > 1 > 2) << '\n';
}
输出:
1
0
0
0
注意:这是由Mooing Duck创建的,可以在http://ideone.com/awrmK找到编译的,更强大的示例
标签:c,operator-overloading 来源: https://codeday.me/bug/20191009/1876504.html