2015年9月2日水曜日

C++14のautoなlambdaとboost::variantのapply_visitor

C++14ではautoなlambda、つまり[](auto a){ return a * a; }のようにgeneric(≃template)なlambdaを使えます。

boost::variantapply_visitorする際に、C++11まではラムダ式でテンプレートなビジターは書けませんでしたが、C++14ではかけるので嬉しい。

#include <string>
#include <iostream>
#include <boost/variant.hpp>

auto main() -> int
{
  auto f = []( auto x )
  {
    boost::variant<unsigned long,double,std::string> v( x );
    apply_visitor( []( auto& y ){ y = y + y; }, v );
    std::cout << v << "\n";
  };

  using namespace std::literals::string_literals;

  f( -1ul  );
  f( -1.0  );
  f( "-1"s );
}

result:

18446744073709551614
-2
-1-1

嬉しい(╹◡╹)

0 件のコメント:

コメントを投稿