模板类中的静态非模板化函数

v01*_*1pe 5 c++ static templates

首先,我不是真的有问题,但我喜欢尽可能简单.我正在使用一个名为templated的类Math,除了很多其他东西之外还有随机函数.

不同类型的随机函数,以及设置随机种子的函数.因此除种子函数之外的每个函数都使用该类型class Real.但是当我想设置种子时,我必须传递一些随机(haha)类型才能调用该函数:

Math<u32>::SeedRandom(System::time());
Run Code Online (Sandbox Code Playgroud)

同样这不是一个真正的问题,但我很好奇是否有可能在不需要使用的情况下获得相同的结果<u32>.

这是Math类的一个片段:

template <class Real>
class Math
{
public:
    static void SeedRandom(u32 seed) { srand(seed); }
    static Real UnitRandom() { return (Real)((f64)rand() / (f64)RAND_MAX); }
};
Run Code Online (Sandbox Code Playgroud)

顺便说一句.f64被typedef定义来doubleu32unsigned int.

Arm*_*yan 4

静态函数应该由 调用ClassName::FunctionName。因为ClassName是模板,所以必须指定模板参数。静态函数也可以在对象上调用,因此object.StaticFunctionName,如果您已经有一个对象,则可以避免指定模板参数,但在我个人的偏见看来,在对象上调用静态函数是丑陋的。

如果我是你,我会做的就是使该函数成为非成员函数(如果需要,可以成为模板的友元),与你的类位于同一名称空间中。