В этом интервью Степанов показывает, как реализовать универсальную функцию max в С++.
Попробуйте реализовать простую вещь объектно-ориентированным способом, скажем, макс. Я не знаю, как это можно сделать. Используя общее программирование, я могу написать:
template <class StrictWeakOrdered> inline StrictWeakOrdered& max(StrictWeakOrdered& x, StrictWeakOrdered& y) { return x < y ? y : x; } and template <class StrictWeakOrdered> inline const StrictWeakOrdered& max(const StrictWeakOrdered& x, const StrictWeakOrdered& y) { return x < y ? y : x; }(вам нужны оба и и const и amp;).
Зачем нужно писать код дважды? Нужно ли это помогать компилятору для оптимизации или конвенции для сокращения ошибок? Является ли max особым случаем, когда тело версии const идентично?
Сколько допустимых перестановок const и не const функция из N аргументов должна определять полный API?