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; }
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)