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
更好
我有一个 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
更好