Boost.Hana を使って名前付き引数
Boost.Hana を使って名前付き引数(っぽいの)をやってみた。
[コード]
#include <iostream> #include <boost/hana.hpp> template<typename T> void print(T t){ std::cout << t[BOOST_HANA_STRING("name")] << ":" << t[BOOST_HANA_STRING("age")] << std::endl; } int main(){ using namespace boost; using namespace boost::hana::literals; print(hana::make_map( hana::make_pair(BOOST_HANA_STRING("name"), "homu"), hana::make_pair(BOOST_HANA_STRING("age"), 13) )); print(hana::make_map( hana::make_pair(BOOST_HANA_STRING("age"), 14), hana::make_pair(BOOST_HANA_STRING("name"), "mami") )); return 0; }
[出力結果]
homu:13 mami:14
一応、それっぽく動作してるんですが、make_pair
や BOOST_HANA_STRING
のあたりがやや冗長ですね。
BOOST_HANA_STRING
将来的には C++17 の user defined literals を利用して "name"_s
みたいに定義できるようになるらしい。