Betrachten Sie folgenden Code:std :: min std :: Chrono :: Dauer verschiedenen Typen
// durations are from std::chrono
auto a = get_duration_1(); // milliseconds, will vary in future versions
auto b = get_duration_2(); // seconds, will vary in future versions
auto c = std::min(a, b);
Es ist nicht kompiliert, da Compiler nicht korrekte Version von std::min
wegen der unterschiedlichen Argumenttypen instanziieren.
Natürlich ist es jetzt möglich, explizit den Typ std::min<milliseconds>
anzugeben. In zukünftigen Versionen dieses Codes werden die Typen variieren. Was ist der generische Weg, dies zu tun, ohne genaue Durationstypen zu kennen?
Wenn es keine ist festgelegt und bestehende Spezialisierung von [ 'std :: min'] (http://en.cppreference.com/w/cpp/algorithm/ min) für ['std :: chrono :: duration'] (http://en.cppreference.com/w/cpp/chrono/duration) (und es gibt keine) dann gibt es kein generisches (und" nice ") Weg. Außer um eine solche Spezialisierung zu machen. Und wenn Sie es in mehr als nur ein paar Orten brauchen, dann könnte eine solche Spezialisierung eine gute Idee sein. –
[Std :: min] (http://en.cppreference.com/w/cpp/algorithm/min) hat keine Version, die verschiedene Argumenttypen akzeptiert. Entweder eines der Argumente oder beides. –
Ich ändere die Frage, so dass die Notwendigkeit für generischen Code explizit angezeigt wird. –