From: Johan Nilsson (r.johan.nilsson_at_[hidden])
Date: 2007-05-08 02:23:50
> "Peter Dimov" <pdimov_at_[hidden]> wrote in
>> Andy wrote:
>>> I agree that the create function needs improvement. It suffers from
>>> threading problems (because of static variables) and from a hard
>>> coded random number generator (also a hard coded seed).
>>> My solution is to create a generator class, as follows:
>>> // maybe a better name
>>> // maybe a different default random number generator
>>> template <typename UniformRandomNumberGenerator = boost::mt19937>
>>> class random_guid_generator : boost::noncopyable
>>> random_guid_generator<> guid_gen;
>>> guid g = guid_gen.create();
>> Why not just add an Engine & e parameter to guid::create?
> Good idea. Something like:
> template<typename Engine>
> boost::guid guid::create(Engine& e = boost::mt19937(get_seed()));
[sorry for jumping in]
That would need to be "Engine const&", right?
> where get_seed() does something like what you said below.
> I want to be able to call the create function with a default Engine
> because I don't want to force users to create one themselves.
I'd suggest to rather use an overload of create with zero arguments. Helps
if the methods are ever used with function binding.
> only downside is for people who do want a different engine/seed, they
> have to pass that engine to the function everytime they call it.
Yes, people are likely to go for one specific engine within a specific
context (e.g. application). Perhaps a _complementing_ guid_factory would be
usable for people preferring the generator/factory interface you mentioned
explicit guid_factory(Engine const& e = Engine())
guid create_guid() [const?]
[mutable?] Engine e_;
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk