読者です 読者をやめる 読者になる 読者になる

Boost.Hana を使って名前付き引数

C++

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_pairBOOST_HANA_STRING のあたりがやや冗長ですね。
BOOST_HANA_STRING 将来的には C++17 の user defined literals を利用して "name"_s みたいに定義できるようになるらしい。