【发布时间】:2020-03-26 09:51:59
【问题描述】:
我想创建一个可以使用任何地图实现的结构。
我们称之为MapHolder。目前,它看起来像这样:
template<template<class, class, class...> class MapType>
struct MapHolder
{
MapType<int, int> m_map;
}
这适用于任何地图。
但我也想尽可能使用自定义比较器/分配器/哈希:
// Works only with std::unordered_map
MapType<int, int, my::hash<int>> m_map;
或者
// Works only with std::map
MapType<int, int, std::greater<>> m_map;
并且它只会使用其中一个类进行编译。
SFINAE 不能帮我让编译器选择最合适的声明吗(即第一个声明 MapHolder<MyMap>,第二个声明 MapHolder<std::unordered_map> 等等)?
【问题讨论】:
-
为什么选择 SFINAE?你可以使用部分模板特化吗?
-
我不知道您在哪里提供自定义比较器/哈希/分配器?
-
SFINAE,因为我不知道部分模板专业化 :) 我在元编程领域还很陌生。
-
它在
MapHolder里面。我想为 STL 容器使用自定义分配器,并为MyMap类使用默认分配器。
标签: c++ compilation stl metaprogramming sfinae