它们都从一个基类继承吗?我必须使用模板吗?
(我指的是这些http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15319/)
我现在正在做这个:
typedef std::mt19937 RNG;
然后
class Chooser {
public:
Chooser(RNG& rng, uint n, uint min_choices, uint max_choices):
换句话说,我正在传递对RNG的引用。那么我如何传递一个任意的生成器?
另外,我意识到这可能是一个不同的问题,但我如何将生成器传递给STL?
std::random_shuffle(choices_.begin(), choices_.end(), rng);
似乎无法工作。
通过生成器的解决方案:
typedef std::ranlux64_base_01 RNG;
typedef std::mt19937 RNGInt;
通过STL传递的解决方案:
struct STL_RNG {
STL_RNG(RNGInt& rng): gen(rng) {}
RNGInt& gen;
int operator()(int n) { return std::uniform_int<int>(0, n)(gen); }
};
random_shuffle
的编译器错误是什么? - PotatoswatterRNG
是一种类型。RNG()
将是一个(临时)函数对象。 - MSalters