Парсинг C++ чрезвычайно труден, потому что грамматика неразрешима. К кавычке Yossi Kreinin :
Исключительно сложная грамматика
"Исключительно" должна быть интерпретирована буквально, потому что все популярные языки имеют контекстно-свободный (или "почти" контекстно-свободный) грамматики, в то время как C++ имеет неразрешимый грамматика. Если Вам нравятся компиляторы и синтаксические анализаторы, Вы, вероятно, знаете то, что это означает. Если Вы не в такого рода вещь, существует простой пример показ проблемы с парсингом C++: [действительно ли 110] определение объекта или объявление функции? Оказывается, что ответ зависит в большой степени от кода прежде оператор - "контекст". Это показывает (на интуитивном уровне), что грамматика C++ довольно контекстно-зависима.
Ваша гипотеза верна. Вы хотите, чтобы оба экземпляра variate_generator
использовали один и тот же экземпляр генератора случайных чисел. Поэтому используйте ссылку на mt19937
в качестве параметра шаблона.
variate_generator<mt19937 &, normal_distribution<float> > nD(randgen, noise1);
variate_generator<mt19937 &, normal_distribution<float> > nC(randgen, noise2);
Очевидно, вам нужно будет убедиться, что randgen
не выходит за пределы области действия до nD
и нКл
д.