C++ 是否有任何类型无关的随机生成器?

Is there any type-independent random generator for C++?

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

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

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

我开始于:

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

它适用于 float 和 double。但我想让它也适用于复数。如果将 double 强制转换为 complex<double>,那么它将只有实数部分。虚部保持为零,所以我现在无法生成带虚部的复数。

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

Class T是一种类型,其中abs+-*/是定义。

您可以使用重载:

类似

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>(/**/)();

注意:在 <random>

中,您的生成器比 rand 更好