我有一个类,它存储和处理T
类型的数据,它只是一个模板类名。
template<class T=float>
class myClass {
public:
//...
};
在其中一个函数中,我想生成一个给定最大绝对值的随机数。
我开始时:
T randvalue = ((T)rand() / RAND_MAX)*MAX_ABS
它适用于float和double。但我也想让它与复杂数字一起使用。如果将double
投放到complex<double>
,那么它只会有一个真实的部分。虚部保持为零,因此我暂时无法用虚部生成复数。
我不要求代码,只是给我提示,如何开始。我想了解,我怎么能创建一个模板化的随机生成器。
班级T
是一种类型,其中定义了abs
,+
,-
,*
,/
。
答案 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>