Nach 20.8.5 §1 ist std::less
eine Klassenvorlage mit einer Elementfunktion:Warum ist std :: less eine Klassenvorlage?
template<typename T>
struct less
{
bool operator()(const T& x, const T& y) const;
// ...
};
Was bedeutet, ich habe die Art zu erwähnen, wenn ich die Vorlage, zum Beispiel std::less<int>
instanziiert. Warum ist std::less
keine normale Klasse mit einer Memberfunktionsvorlage?
struct less
{
template<typename T, typename U>
bool operator()(const T& x, const U& y) const;
// ...
};
Dann konnte ich einfach std::less
einem Algorithmus ohne Typ Argument übergeben, die behaarte bekommen kann.
Ist das nur aus historischen Gründen, weil frühe Compiler (angeblich) Memberfunktionsvorlagen nicht sehr gut (oder vielleicht sogar überhaupt) unterstützen, oder gibt es etwas, das tiefer liegt?
'std :: string a; std :: less() (a, "HI"); '(siehe' std :: lower_bound') –
C++ 14 wird eine Spezialisierung beinhalten, um 'std :: less <>()' perfekt-weiterleiten zu können. Siehe [N3421] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3421.htm), das (glaube ich) ohne Änderungen in Portland eingeführt wurde. –
@MooingDuck 'std :: less() (a," HI ")' ist 'wahr 'auf meinem System, ist das ein Problem? – fredoverflow