我已经在 boost mailinglist 上问过这个问题,但我并不清楚我的意图。也可能是我不完全理解如何做到这一点。
我想在hana中合并多个地图,见下面的代码示例:
constexpr auto m1 = hana::make_map(
hana::make_pair("key1"_s, hana::type_c<std::string>),
hana::make_pair("key2"_s, hana::type_c<std::string>)
);
constexpr auto m2 = hana::make_map(
hana::make_pair("key3"_s, hana::type_c<std::string>),
hana::make_pair("key4"_s, hana::type_c<std::string>),
hana::make_pair("key5"_s, hana::type_c<std::string>)
);
constexpr auto m3 = hana::make_map(
hana::make_pair("key6"_s, hana::type_c<std::string>),
hana::make_pair("key7"_s, hana::type_c<std::string>),
hana::make_pair("key8"_s, hana::type_c<std::string>)
);
我已经得到了如何为两张地图执行此操作的答案:
constexpr auto result = hana::fold_left(m1, m2, hana::insert);
constexpr auto expected = hana::make_map(
hana::make_pair("key1"_s, hana::type_c<std::string>),
hana::make_pair("key2"_s, hana::type_c<std::string>),
hana::make_pair("key3"_s, hana::type_c<std::string>),
hana::make_pair("key4"_s, hana::type_c<std::string>),
hana::make_pair("key5"_s, hana::type_c<std::string>)
);
当我检查文档时,我可以看到 fold_left 需要 2 或 3 个参数。
看起来我需要类似的东西: fold_left(fold_left(m1, m3, hana::insert), m2, hana::insert);
template<typename Map...>
constexpr auto merge_multiple_maps(Map... args) {
// do something useful here...
}
但是我不确定如何从这里开始,而且我在元编程方面仍然没有太多经验......
问候, 马蒂斯