パラメータ使用すると、このような何かをすることが可能です:テンプレートを不履行のためのT ::型のtypedefは
template <typename T, typename Comparator = std::less<typename T::Key>>
struct Container
{
std::map<typename T::Key, T*, Comparator> m;
};
これが問題の一部です:typename Comparator = std::less<typename T::Key>
すなわちの実装内のtypedefを持っていますコンパレータの特殊化に使用されます。コンパレータが使用するもの(T :: Key)がテンプレートの明示的なパラメータとして指定されることは常に必要ですか?
Tクラスを変更することでこれを回避する方法が他にもあることが分かりました(明示的なT :: compareKeyメソッドが必要です)が、テンプレート構文を使用してこのようなことを達成できるかどうかについては、
まずコンパイルしてみませんか? – Nawaz
エラーC2146:シンタックスエラー:識別子 'Key'の前に '、'がありません – idij
@idij - どのコンパイラを使用し、どのヘッダを含んでいますか? :-)孤立しているようです。 –