提升hana:从一个集合和一个默认值创建一个地图

时间:2017-03-01 17:11:47

标签: c++ dictionary boost set boost-hana

我有一个boost :: hana ::类型集,想要用它创建一个地图,其值是bool's。

// I have a hana set:
auto my_set = hana::make_set(hana::type_c< int >, hana::type_c< float > ...);

// and want to transform it to a map with a given runtime value as values:
auto wanted_map = hana::make_map(
    hana::make_pair(hana::type_c< int >, false),
    hana::make_pair(hana::type_c< float >, false),
    ...
);

2 个答案:

答案 0 :(得分:1)

hana::sethana::Foldable,因此您可以使用hana::unpack。考虑这个例子:

#include <boost/hana.hpp>

namespace hana = boost::hana;


int main() {
  constexpr auto make_pair_with = hana::curry<2>(hana::flip(hana::make_pair));

  auto result = hana::unpack(
    hana::make_set(hana::type_c< int >, hana::type_c< float >),
    hana::make_map ^hana::on^ make_pair_with(false)
  );

  auto expected = hana::make_map(
    hana::make_pair(hana::type_c< int >, false),
    hana::make_pair(hana::type_c< float >, false)
  );

  BOOST_HANA_RUNTIME_ASSERT(result == expected);
} 

答案 1 :(得分:1)

杰森的回答是完美的,但是这里使用lambda是相同的(我通常发现它更具可读性):

createRecord(name) {
    const headers = new Headers({ 'Content-Type': 'application/json' });
    const options = new RequestOptions({ headers: this.headers });
    const body = JSON.stringify(name);
    return this._http.post
    ('https://api.someapiurl?apikey=someapikey',
    body, options).map((res: Response) => res.json());
}