如果我有一个函数,我怎样才能将C ++ 11随机数生成器(如std::mt19937)作为参数传递给非模板函数,而不强制调用者使用什么RNG? / p>
C ++ 11随机数生成器似乎没有共同的基础。 我是否被迫将该功能作为模板,或强制使用特定的发电机?
我尝试的一件事是将其作为std::function<int()>
传递,但是,唉,例如std :: uninform_distribution需要operator()
,max()
和min()
作为成员-functions。
如果像std::uninform_distribution
这样的东西需要一个公共接口,那么生成器是否会继承一些基本接口,我可以将其作为通用引用?
答案 0 :(得分:0)
它们并非来自共同基础,因为它们不打算以多态方式使用。所以是的,如果您需要的不仅仅是operator()
(传递为std::function<std::mt19937::result_type()>
会给您),那么您需要将其设为功能模板。
当概念成为语言时,我们将能够做到这样的事情:
void foo(RandomNumberEngine engine);
将根据传递的参数检查概念RandomNumberEngine
的要求。