これは宿題ですが、別のアプローチで既に提出されています。
Visual Studio 2008 から以下を取得しています
エラー C2893: 関数テンプレート 'void std::sort(_RanIt,_RanIt,_Pr)' の特殊化に失敗しました
コードは次のとおりです。
main.cpp データベース <> デシベル; デシベル.loadDatabase(); db.sortDatabase(sort_by_title()); データベース.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 *> > クラス データベース : public IDatabase<C>
[/編集]
[Edit2]
Toolbox からの提案 (非常に妥当と思われる) の後、次のエラー メッセージが表示されました。
エラー C2664: 'Database<>::sortMedia': パラメーター 1 を 'sort_by_title' から 'const sort_by &' に変換できません
main.cpp は同じですが、ファンクター階層とソース ファイルにわずかな変更が加えられています。前方宣言などが機能しなかったため、定義を別のファイルに入れる必要がありました。
検索.h struct_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 { リターン (*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> { 公衆: sort_by(sort_by_impl *sbp) : sbp_(sbp) {}; bool operator()(const Media *l, const Media *r) const { return (*sbp_)(l, r); } プライベート: sort_by_impl *sbp_; }; main.cpp デシベル.sortDatabase(&sort_by_title()); データベース.cpp void Database<C>::sortDatabase(const sort_by &s) { std::sort(db_.begin(), db_.end(), s);
これは、別のプロジェクト (この日の大部分をこれをいじるのに費やしています) と、数日前に提出した実際のプロジェクトの両方で機能しているようです。
お時間をいただき、ありがとうございました。
[/Edit3]