Według 20.8.5 §1, std::less
jest szablon klasy z funkcji członka:Dlaczego std :: less jest szablonem klasy?
template<typename T>
struct less
{
bool operator()(const T& x, const T& y) const;
// ...
};
Czyli muszę wspomnieć rodzaj kiedy instancji szablonu, na przykład std::less<int>
. Dlaczego nie jest to normalna klasa z szablonem funkcji członkowskich?
struct less
{
template<typename T, typename U>
bool operator()(const T& x, const U& y) const;
// ...
};
Wtedy może po prostu przejść std::less
algorytmu bez typu argumentu, który może dostać owłosione.
Czy jest to tylko z powodów historycznych, ponieważ wczesne kompilatory (podobno) nie obsługiwały szablonów funkcji członków bardzo dobrze (a może nawet w ogóle), czy jest w tym coś głębszego?
'std :: string a; std :: less() (a, "HI"); '(zobacz' std :: lower_bound') –
C++ 14 będzie zawierał specjalizację, która sprawi, że 'std :: less <>()' będzie idealnie przekazywane dalej. Zobacz [N3421] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3421.htm), który (jak sądzę) został przyjęty w Portland bez modyfikacji. –
@MooingDuck 'std :: less() (a," HI ")' to 'true' w moim systemie, czy to jest problem? – fredoverflow