В этом интервью Степанов показывает, как реализовать универсальную функцию 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?