суббота, 27 ноября 2010 г.

std::min/std::max

Стандартную библиотеку С++ мы используем очень активно, включая алгоритмы.
В сочетании с заголовками Windows это дает иногда интересные эффекты с min/max, которые не глядя определены там как макросы...

Традиционно эта проблема решается через "#define NOMINMAX" перед включением windows.h, но тогда возникают проблемы, например, с компиляцией заголовков ATL.

Наиболее простой вариант решения в случае совместной нужды в windows.h и стандартной библиотеке заключается в использовании (std::min)() и (std::max)() - в этом случае препроцессор не обрабатывает min и max, и все работает ровно так, как и требуется.
Подсмотрел я это на днях в блоге у Raider'a, правда чуть позже вспомнил, что уже натыкался на использование данной техники в заголовках Boost, но потом как-то запамятовал...

Комментариев нет: