如何将 <random> RNG 作为非模板函数的参数传入?

How do you pass in a <random> RNG as a parameter of a non-template function?

本文关键字:函数 参数 lt random gt RNG      更新时间:2023-10-16

如果我有一个函数,如何将 C++11 随机数生成器(如 std::mt19937)作为参数传递给非模板函数,而无需强制调用者使用什么 RNG?

C++11 随机数生成器似乎没有共享一个共同的基础。 我是否被迫使函数成为模板,或者强制使用特定的生成器?

我尝试的一件事是将其作为std::function<int()>传入,但是,唉,像 std::uninform_distribution 这样的东西需要operator()max()min()作为成员函数。

如果像std::uninform_distribution期望并需要一个通用接口,生成器是否继承了一些基本接口,我可以将其作为通用参考?

它们不是从公共基础派生的,因为它们不打算多态使用。所以是的,如果你需要的不仅仅是operator()(作为std::function<std::mt19937::result_type()>传递会给你),那么你需要把它变成一个函数模板。


当概念进入语言时,我们将能够做这样的事情:

void foo(RandomNumberEngine engine);

概念RandomNumberEngine的要求将根据传递的参数进行检查。