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

时间:2014-01-21 23:03:48

标签: c++ c++11 random

如果我有一个函数,我怎样才能将C ++ 11随机数生成器(如std::mt19937)作为参数传递给非模板函数,而不强制调用者使用什么RNG? / p>

C ++ 11随机数生成器似乎没有共同的基础。 我是否被迫将该功能作为模板,或强制使用特定的发电机?

我尝试的一件事是将其作为std::function<int()>传递,但是,唉,例如std :: uninform_distribution需要operator()max()min()作为成员-functions。

如果像std::uninform_distribution这样的东西需要一个公共接口,那么生成器是否会继承一些基本接口,我可以将其作为通用引用?

1 个答案:

答案 0 :(得分:0)

它们并非来自共同基础,因为它们不打算以多态方式使用。所以是的,如果您需要的不仅仅是operator()(传递为std::function<std::mt19937::result_type()>会给您),那么您需要将其设为功能模板。


当概念成为语言时,我们将能够做到这样的事情:

void foo(RandomNumberEngine engine);

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