Как мне справиться с максимальным макросом в windows.h, сталкивающимся с максимальным в std?

Итак, я пытался получить действительный целочисленный ввод от cin и использовал ответ на этот вопрос .

Он рекомендовал:

#include  // includes WinDef.h which defines min() max()
#include 
using std::cin;
using std::cout;

void Foo()
{
    int delay = 0;
    do
    {
        if(cin.fail())
        {
            cin.clear();
            cin.ignore(std::numeric_limits::max(), '\n');
        }
        cout << "Enter number of seconds between submissions: ";
    } while(!(cin >> delay) || delay == 0);
}

Что дает мне ошибку в Windows, говорящую о том, что макрос maxне принимает столько аргументов. Это значит, что я должен это сделать

do
{
    if(cin.fail())
    {
        cin.clear();
#undef max
        cin.ignore(std::numeric_limits::max(), '\n');
    }
    cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay == 0);

Чтобы заставить его работать. Это довольно уродливо; есть ли лучший способ обойти эту проблему? Может быть, мне следует сохранить определение maxи переопределить его позже?

55
задан Community 23 May 2017 в 01:55
поделиться