Покурил мануалы и Google — не помогло, не могу понять в чем проблема.
В общем, понадобилось использовать std::sort() внутри класса для сортировки vector
Пишу:
template<class T> class ClassName {
private:
std::vector<T> myvector;
public:
void data_sort(SortMode mode);
...
bool compare_asc(const T i, const T j); //Для сортировки по возрастанию
bool compare_desc(const T i, const T j); //По убыванию
...
};
...
template<class T>
void ClassName<T>::data_sort(SortMode mode)
{
switch(mode) {
case ASC:
std::sort(myvector.begin(), myvector.end(), ClassName<T>::compare_asc);
break;
case DESC:
std::sort(myvector.begin(), myvector.end(), ClassName<T>::compare_desc);
break;
}
}
template<class T>
bool ClassName<T>::compare_asc(const T i, const T j)
{
return (i < j);
}
template<class T>
bool ClassName<T>::compare_desc(const T i, const T j)
{
return (i > j);
}
...
В итоге получаю следующее
In member function ‘void ClassName::data_sort(SortMode) [with T = int]’:<br/>
main.cpp:73:30: instantiated from here<br/>
storage.h:44:4: error: no matching function for call to ‘sort(std::vector<int, std::allocator >::iterator, std::vector<int, std::allocator >::iterator, )’<br/>
storage.h:44:4: note: candidates are:<br/>
/usr/include/c++/4.6/bits/stl_algo.h:5317:5: note: template<class _RAIter> void std::sort(_RAIter, _RAIter)<br/>
/usr/include/c++/4.6/bits/stl_algo.h:5353:5: note: void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator > >, _Compare = bool (ClassName::*)(int, int)]<br/>
/usr/include/c++/4.6/bits/stl_algo.h:5353:5: note: no known conversion for argument 3 from ‘’ to ‘bool (ClassName::*)(int, int)’<br/>
<br/>
То есть насколько я понял, компилятор не может понять какую функцию вызывать, поданную ей в качестве параметра, либо стандартную.<br/>
Вроде бы, сделал всё как описано в <a href="http://cplusplus.com/reference/algorithm/sort/">примере</a>