boost::tupleで多値を受け取る

簡単だった。もっと早く使ってれば良かった。画像処理は座標とかサイズを複数返したい時がよくあるから


関数宣言とmake_tupleの引数の数が違うとコンパイル時にエラーになる。intやdoubleは混ぜるとcastされる。

tupletest.cpp

#include <iostream>
#include <string>
#include <boost/tuple/tuple.hpp>
#include <boost/tuple/tuple_io.hpp>

using namespace std;
using namespace boost;

// 多値を返す
tuple<int, double, string> test_func(){
  return make_tuple(15, 3.14, "hello work");
}

int main(int argc, char* argv[]){
  tuple<int, double, string> result_t = test_func();
  cout << result_t.get<0>() << endl; // 個別の値を取り出す
  cout << result_t.get<1>() << endl;
  cout << result_t.get<2>() << endl;

  cout << result_t << endl; // tuple_ioのincludeが必要
  return 0;
}

Makefile

SRC = tupletest.cpp
DST = tupletest

prefix=/opt/local
INCPATH=/opt/local/include
LIBPATH=/opt/local/lib

CC=g++ -O

INCLUDE=-I$(INCPATH)/boost
LIB=$(LIBPATH)/libboost_regex-mt.a

all:
	$(CC) $(SRC)  -o $(DST) $(INCLUDE) $(LIB)


実行

15
3.14
hello work
(15 3.14 hello work)