元组将运算符==,!=,<,>,< =和> =减少到相应的基本运算符。这意味着,如果在两个元组的所有元素之间定义了这些运算符中的任何一个,那么在元组之间也定义了相同的运算符。
它还说:
全球运营商<<已经为std :: ostream重载,以便通过递归调用operator<<来输出元组。对于每个元素。
这里给出的示例代码看起来应该可以轻松使用这些功能。
那么为什么这段代码无法编译?
#include <iostream>
#include <boost/tuple/tuple.hpp>
int main()
{
using namespace std;
using namespace boost;
using namespace boost::tuples;
tuple<int, int> t1(0, 0);
tuple<int, int> t2(0, 0);
cerr << "t1: " << t1 << endl;
cerr << "t2: " << t2 << endl;
if (t1 == t2) { cerr << "equal\n"; } else { cerr << "notequal\n"; }
return 0;
}
g++ -Wall -Wextra -Werror tuple.cxx -o tuple
我得到:
tuple.cxx: In function ‘int main()’:
tuple.cxx:12:17: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘boost::tuples::tuple<int, int>’)
cerr << "t1: " << t1 << endl;
^
和雪崩相关的错误。
在ubuntu 14.04和16.04上,libboost-1.54和1.58,g ++ - 4.8.4和5.4.0的行为相似。
答案 0 :(得分:3)
您关联的网页也说
要使用该库,只需包含:
#include "boost/tuple/tuple.hpp"
比较运算符可以包括在:
#include "boost/tuple/tuple_comparison.hpp"
使用元组输入和输出运算符
#include "boost/tuple/tuple_io.hpp"