Как вывести из строя неконтейнерные параметры
У меня есть функция шаблона, которую я хочу включить только для стандартных контейнеров (или контейнеров, совместимых со стандартными контейнерами, которые по крайней мере обеспечиваютbegin()
функция-член). Я СФИНАИРУЮ неконтейнеры следующим образом:
template<typename Container>
typename Container::value_type
f(const Container& c,
typename std::enable_if<
std::is_same<
decltype(*c.begin()),
typename Container::value_type
>::value
>::type* = nullptr)
{
// implementation here
}
std::is_same
а такжеdecltype
не выглядит слишком элегантно Есть ли лучший способ сделать это?
PS: мне нужен SFINAE, потому что у меня другая перегрузка
template<typename Derived>
f(const Eigen::MatrixBase<Derived>& A)
и всякий раз, когда я пытаюсьf(some_Eigen_matrix)
,Container
перегрузка заканчивается, затем компилятор выдает ошибку, потому что тип отсутствуетbegin()
.