每次我开发一些大型的功能时,需要多个模块协同工作来构建一个最终的功能,我就会想同样的问题:如果有多个模块需要使用随机函数,应该在哪里初始化随机种子呢?
如果我有一个需要随机数的类(例如,这个类通过自己实现的快速排序算法对输入数组进行初始化,因此需要用随机数选择枢轴),我通常会有一个私有的
如果我有很多实用函数在一个命名空间中,我会做类似的事情:我将这样的变量放在我的utils库的匿名命名空间中,并且做与类相同或相似的事情。
我面临的问题是当组合这些模块时。单独地,我知道每个模块不会设置种子超过一次。但是,我想能够使用各种各样的模块,我希望其他人能够独立使用一个或多个我的模块...
因此,如何处理需要多个随机种子的模块?在每个模块中设置种子?不设置种子,而是记录随机使用情况,并要求用户初始化种子以使用该模块?还是其他方式?
如果我有一个需要随机数的类(例如,这个类通过自己实现的快速排序算法对输入数组进行初始化,因此需要用随机数选择枢轴),我通常会有一个私有的
static bool isRandOn;
变量,所以在开始随机选择枢轴之前,我会检查该变量,并执行srand(time(NULL));
如果随机数还没有被打开。如果我有很多实用函数在一个命名空间中,我会做类似的事情:我将这样的变量放在我的utils库的匿名命名空间中,并且做与类相同或相似的事情。
我面临的问题是当组合这些模块时。单独地,我知道每个模块不会设置种子超过一次。但是,我想能够使用各种各样的模块,我希望其他人能够独立使用一个或多个我的模块...
因此,如何处理需要多个随机种子的模块?在每个模块中设置种子?不设置种子,而是记录随机使用情况,并要求用户初始化种子以使用该模块?还是其他方式?
srand
,可以编写一个包装器 :) - Matthieu M.