Это домашнее задание, хотя оно уже отправлено с другим подходом.
Я получение следующего из Visual Studio 2008
error C2893: Failed to specialize function template 'void std::sort(_RanIt,_RanIt,_Pr)'
Код выглядит следующим образом
main.cpp Database<> db; db.loadDatabase(); db.sortDatabase(sort_by_title()); Database.cpp void Database<C>::sortDatabase(const sort_by &s) { std::sort(db_.begin(), db_.end(), s); }
И объекты функций определены как
struct sort_by : public std::binary_function<const Media *, const Media *, bool> { virtual bool operator()(const Media *l, const Media *r) const = 0; }; struct sort_by_title : public sort_by { bool operator()(const Media *l, const Media *r) const { ... } }; ...
Какое здесь лекарство?
[Изменить] Извините, возможно, мне следовало очистить наследование
template <typename C = std::vector<Media *> > class Database : public IDatabase<C>
[/ Edit]
[Edit2]
После предложения Toolbox (которое казалось очень разумным) я получил следующее сообщение об ошибке
error C2664: 'Database<>::sortMedia' : cannot convert parameter 1 from 'sort_by_title' to 'const sort_by &'
main.cpp все тот же, но с некоторыми небольшими изменениями в иерархии функторов и исходных файлах. Прямые объявления и тому подобное не работали, поэтому мне пришлось поместить определения в отдельные файлы.
Search.h struct sort_by_impl { virtual bool operator()(const Media *l, const Media *r) const = 0; }; struct sort_by : public std::binary_function<const Media *, const Media *, bool> { sort_by_impl *sbp; bool operator()(const Media *l, const Media *r) const { return (*sbp)(l, r); } }; IDatabase.h struct sort_by_title : public sort_by_impl { bool operator()(const Media *l, const Media *r) const { return (l->getTitle() < r->getTitle()); } };
Я действительно не гроклю, что мне здесь не хватает? Какая-то операция преобразования, что ли?
[/ Edit2]
[Edit3]
Надеюсь, последнее и последнее редактирование. Я действительно заработал после отладки и переписывания некоторой части кода. Это то, что у меня получилось, и это лучшее, что я мог сделать
class sort_by : public std::binary_function<const Media *, const Media *, bool> { public: sort_by(sort_by_impl *sbp) : sbp_(sbp) {}; bool operator()(const Media *l, const Media *r) const { return (*sbp_)(l, r); } private: sort_by_impl *sbp_; }; main.cpp db.sortDatabase(&sort_by_title()); Database.cpp void Database<C>::sortDatabase(const sort_by &s) { std::sort(db_.begin(), db_.end(), s);
Кажется, это работает как в отдельном проекте (потратив большую часть этого дня на возня с этим), так и в моем собственном проекте, который я представил несколько дней. назад.
Большое спасибо за ваше время и помощь!
[/ Edit3]