一个将如何实现三元比较运算符来确定,例如,a < b < c
布尔值?三元比较运算符重载
2
A
回答
6
解决方案: 编码比较时,返回类型应为comparison
对象,可以链接附加比较,但可以隐式转换为bool
。这甚至(种)可以与没有这种意图的编码,只需通过他们铸造手动comparison
型工种。
实现:
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
+11
现在你已经回答“可以完成吗?”,“应该完成吗?”留给读者作为练习。 – msw
3
相关问题
- 1. 重载比较运算符
- 2. 运算符重载“运算符T *()”产生比较运算符?
- 3. 重载比较运算符== C++
- 4. Python的比较运算符重载
- 5. 重载堆栈的比较运算符
- 6. 为MyString类重载比较运算符
- 7. 在PHP中比较运算符重载
- 8. 在C++中重载比较运算符
- 9. 在c + +运算符重载(比较运算符)
- 10. numpy元素与重载运算符的比较
- 11. 链接比较(重载不可重载的“和”运算符)
- 12. 比较运算符
- 13. 比较运算符
- 14. 比较运算符
- 15. 节点js三元运算符为什么比较出错?
- 16. 爪哇三元(内联)运算符:accesing比较 - 变量
- 17. 三元运算符
- 18. 逻辑比较==运算符过载
- 19. 将三个数字与Java逻辑三元运算符进行比较?
- 20. 从重载比较运算符的int派生类访问原始int比较
- 21. 重新格式化三元运算符
- 22. 多个比较运算符
- 23. PowerShell比较运算符
- 24. TypeTag和比较运算符?
- 25. 比较运算符!==对0
- 26. 比较位运算符
- 27. Python比较运算符
- 28. 比较运算符问题
- 29. 逻辑比较运算符
- 30. SQL比较运算符
呃,你张贴了这个问题,所以您可以张贴别人的答案..? – ildjarn
我认为这将是在C++更可读的写类似'范围(A,C)。载(B)'。 –
@ildjarn是的,但是这是张贴在休息室,我问权限张贴在主要网站上。 –
Drise