C++ にもタプルは存在するが使いづらい2021年04月15日 12時50分08秒

C++ にも他の言語のようにタプルが導入されている。複数の型の変数を任意でまとめる事が出来る。無名の構造体とほぼ同じような使い方が出来るが、各項目に名前ではなく数字でアクセスする点が異なる。別のとらえ方をすると、好きな型を詰め込める std::vector の様なもの。二個以上の変数を詰め込める std::pair の拡張とも言える。

tuple ヘッダファイルに定義され、std::tuple で変数を宣言できる。各要素を一気に展開するのに std::tie が使える。

#include <tuple>
#include <string>
#include <iostream>

int main()
{
    std::tuple< int, std::string > pair( 3, "error" );

    int i;
    std::string s;

    std::tie( i, s ) = pair;

    std::cout << std::get< 0 >( pair ) << " : " << std::
get< 1 >( pair ) << std::endl;
    std::cout << i << " : " << s << std::endl;
}
実行結果はこちら。
% c++ tuple_tie.cpp
% ./a.out 
3 : error
3 : error

ただ、 C++ は強い型宣言の言語なので、緩い型の他のスクリプト言語などと比べると、使える場面が凄く限られてくる。std::pair は特定の二つの型を関係付けるのに使ったが、tuple の任意の変数を関連付けるのが真価を発揮しづらい。