Как условно реализовать функцию в шаблонном классе для типа 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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