У меня есть фрагмент существующего кода, который использует случайные числа:
double Foo(bool b)
{
double d = 200.0;
if (b)
{
d /= RAND_MAX + 1;
srand((unsigned)time(NULL));
}
return (d / rand());
}
Я хотел бы заменить его на эквивалент C ++ 11, но никогда раньше не использовал этот API. После прохождения этого примера и этого документа я получил следующий код:
#include <chrono>
#include <random>
class MVCE
{
private:
std::default_random_engine m_generator;
std::uniform_int_distribution<int> m_distribution{};
public:
MVCE()
{
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
m_generator.seed(seed);
}
double Foo(bool b)
{
double d = 200.0;
if(b)
{
d /= m_generator.max() - m_generator.min() + 1;
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
m_generator.seed(seed);
}
return (d / (m_generator() - m_generator.min()));
}
};
Я использую Visual Studio 2019. При попытке MVCE
класс на Ideone, он работает, но Visual studio жалуется на m_generator.max()' and
m_generator.min () 'со следующей ошибкой:
E0133 expected a member name
При наведении курсора на max()
показывается макрос max
(#define max(a, b) (((a) > (b)) ? (a) : (b))
), при наведении на min()
показывает макрос min
(#define min(a, b) (((a) < (b)) ? (a) : (b))
).
Поскольку я впервые использую новый API, может ли кто-нибудь проверить, правильно ли я его использовал? Может кто-нибудь помочь мне устранить упомянутую ошибку?