Как условно реализовать функцию в шаблонном классе для типа T, где T — указатель на тип S, только если тип S имеет операC++

Программы на C++. Форум разработчиков
Anonymous
Как условно реализовать функцию в шаблонном классе для типа T, где T — указатель на тип S, только если тип S имеет опера

Сообщение Anonymous »

У меня есть класс шаблона контейнера, который внутренне объединяет std::vector типа T, где T на самом деле является указателем на тип S. Я хочу создать функцию-член, Insert_sorted(), которая реализуется только в том случае, если тип S, T указывает, фактически поддерживает операторbool { return *a < *b; });

if (it == end() || *val < *(*it))
{
m_container.insert(it, val);
return true;
}
return false;
}
[/code]

Теперь я нашел рабочее решение, в котором функция-член реализована в объявлении класса. Однако я не могу разделить код на декларацию и реализацию. Честно говоря, в этом нет необходимости, но выглядело бы красивее.

Код: Выделить всё

  template 
bool insert_sorted(const value_type& val)
{
auto it = std::lower_bound(begin(), end(), val, [](const value_type& a, const value_type& b)->bool { return *a < *b; });

if (it == end() || *val < *(*it))
{
m_container.insert(it, val);
return true;
}
return false;
}
В идеале мне бы хотелось что-то вроде этого, но реализация помечается как ошибка (объявление не соответствует):

Код: Выделить всё

  template
bool                      insert_sorted(const value_type& val);

Код: Выделить всё

template
bool PtrVector::insert_sorted(const value_type& val)
{
auto it = std::lower_bound(begin(), end(), val, [](const value_type& a, const value_type& b)->bool { return *a < *b; });

if (it == end() || *val < *(*it))
{
m_container.insert(it, val);
return true;
}
return false;
}
Грустно видеть, что за этот вопрос проголосовали отрицательно. Хотя я здесь, конечно, не для того, чтобы голосовать, мне кажется, что это умаляет мой вопрос. Мне искренне интересно узнавать что-то новое, и большая часть этого для меня очень нова.
Спасибо Реми за подчистку текста.

Подробнее здесь: https://stackoverflow.com/questions/793 ... pe-t-where

Вернуться в «C++»