是否有任何类型独立的随机生成器用于C ++?

时间:2015-12-22 00:00:37

标签: c++ templates std complex-numbers

我有一个类,它存储和处理T类型的数据,它只是一个模板类名。

template<class T=float>
class myClass {
public:
    //...
};

在其中一个函数中,我想生成一个给定最大绝对值的随机数。

我开始时:

T randvalue = ((T)rand() / RAND_MAX)*MAX_ABS

它适用于float和double。但我也想让它与复杂数字一起使用。如果将double投放到complex<double>,那么它只会有一个真实的部分。虚部保持为零,因此我暂时无法用虚部生成复数。

我不要求代码,只是给我提示,如何开始。我想了解,我怎么能创建一个模板化的随机生成器。

班级T是一种类型,其中定义了abs+-*/

1 个答案:

答案 0 :(得分:2)

您可以使用过载:

类似

template <typename T> struct tag {};
float create_random(tag<float>);
double create_random(tag<double>);
template<typename T>
complex<T> create_random(tag<complex<T>> c);

使用

T randvalue = create_random(tag<T>{});

或模板专业化:

template <typename T>
struct random_generator
{
    T operator()(); // you can provide default implementation.
};

template <> float random_generator<float>::operator()() {/**/}
template <> double random_generator<double>::operator()() {/**/}
template <typename T> complex<T> random_generator<complex<T>>::operator()() {/**/}

并使用它

T randvalue = random_generator<T>(/**/)();

注意:rand

中的生成器优于<random>