std::min
и std::max
с одноименными макросами из файла windows.h
мне подсказали интересное решение.Если вместо, например,
std::max(a, b)
написать (std::max)(a, b)
, то результат работы препроцессора выглядит так:#line 3 "minmax.cpp"
int main() {
int a = (std::min)(10, 20);
return 0;
}
вместо:#line 3 "minmax.cpp"
int main() {
int a = std::(((10) < (20)) ? (10) : (20));
return 0;
}
и конфликта не происходит. Все компилируется без проблем.Не берусь судить, на сколько это красивое решение, и я бы все-таки предпочел действовать напрямую через макрос
NOMINMAX
, но выход элегантный.Другие посты по теме:
Я предпочитаю NOMINMAX.
ОтветитьУдалитьВот бы еще было бы средство отключать стандартные макросы из windows.h
Например:
У меня в gui была ф.я. MessageBox. пока она не экспортировалась все было ок. Однако потом когда по GetProcAddress я не смог ее получить глянул в таблицу экспотра своего fEngine.dll и увидел там функцию MessageBoxA !!! Пришлось переименовать в MsgBox. Вот так вот.
Если кто знает способ такого избежать, напишите плиз.
Можно было попробовать сделать
ОтветитьУдалить#undef MessageBoxA