Не удалось специализировать шаблон функции

Это домашнее задание, хотя оно уже отправлено с другим подходом.

Я получение следующего из 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]

5
задан citizencane 8 January 2011 в 21:44
поделиться