У меня есть класс шаблона контейнера, который внутренне объединяет 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