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

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

Сообщение 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;
}

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

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++»