boost::tuple

トップページ > 拡張データ型 >

abstract

必要なヘッダ
<boost/tuple/tuple.hpp>,
<boost/tuple/tuple_comparison.hpp> (大小比較をするなら),
<boost/tuple/tuple_io.hpp> (入出力するなら)
出来ること
3個以上もOKなstd::pairみたいなもの
リファレンス
en / jp

sample

#include <iostream>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_io.hpp>
using namespace std;

boost::tuple<int, int, int, double> add_sub_mul_div(int a, int b)
{
	// 四則演算結果を全部返す関数です
	return boost::make_tuple(
		a+b,
		a-b,
		a*b,
		double(a)/double(b)
	);
}

int main()
{
	boost::tuple<int, int, int, double> t = add_sub_mul_div( 3, 2 );
	cout << t << endl;

	// 各要素の取り出しなどしてみる
	cout << "0: " << t.get<0>() << endl;
	cout << "1: " << t.get<1>() << endl;
	cout << "2: " << t.get<2>() << endl;
	cout << "3: " << t.get<3>() << endl;

	return 0;
}

出力例

(5 1 6 1.5)
0: 5
1: 1
2: 6
3: 1.5

etc

一度に二つの値を関数の返値として返したいときは std::pair ですが、三つ以上だとこの boost::tuple が便利です。

あとこれに関連して boost::tie を使うと、 だんだん関数型言語っぽくなってきて面白かったり。 詳しくは本家の リファレンス をどうぞ。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0