Я хочу создать структуру, которая может использовать любую реализацию карт. Давайте назовем это MapHolder
. В настоящее время это выглядит так:
template<template<class, class, class...> class MapType>
struct MapHolder
{
MapType<int, int> m_map;
}
И это будет работать с любой картой.
Но я также хочу использовать пользовательский компаратор / распределитель / ха sh, когда это возможно:
// 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>
и т. д.)?