C++11時代はタプル操作なのでtuple版for_eachとstd::hash<tuple>

C++11時代はtuple操作がいろいろイケメンだと女の子にモテモテだと聞いて

tupleって抽象化された構造体だよねー

コード

 

struct Printer
{
    template<class T>
    void operator()(const T&x)
    {
        std::cout << x;
    }
};

int main()
{
    using namespace tuple_helper;
    auto x=std::make_tuple(3,"absd",15);
    tuple_foreach(x,Printer());  //3absd15
};

operator()(T)を実装したビジター(これだとPrinter)が必要になる

どうにもビジターがローカルクラスで作れないのが難点だが一々tuple総舐めする関数書くより楽

 

これを使ってtupleのハッシュも作ってみた

using namespace tuple_helper;
typedef std::tuple<int, std::string, int> Tuple;
Tuple x(3, "absd", 15);
Tuple y(4, "dddd", 30);
std::unordered_set<Tuple> set;
set.insert(x);
std::cout << (set.find(x) != set.end()) << (set.find(y) != set.end());

分りずらいけどstd::hash<tuple<>>が別ファイルで特殊化されている

unorderd_setが動くぞ!!unorderd_mapも動くぞ!!