首先,我并不是真的有问题,但我喜欢让事情尽可能简单。
我正在使用一个名为 Math
的模板化类除了很多其他东西之外,还有随机函数。
不同类型的随机函数,以及设置随机种子的函数。所以除了种子函数之外的每个函数都使用类型 class Real
.但是当我想设置种子时,我必须传递一些随机(哈哈)类型才能调用该函数:
Math<u32>::SeedRandom(System::time());
同样,这不是一个真正的问题,但我很好奇是否有可能在不需要使用 <u32>
的情况下获得相同的结果。 .
这里是数学课的片段:
template <class Real>
class Math
{
public:
static void SeedRandom(u32 seed) { srand(seed); }
static Real UnitRandom() { return (Real)((f64)rand() / (f64)RAND_MAX); }
};
顺便说一句。 f64
类型定义为 double
和 u32
至 unsigned int
.
最佳答案
静态函数应该由 ClassName::FunctionName
调用。因为 ClassName
是一个模板,所以您必须指定模板参数。静态函数也可以在一个对象上调用,即 object.StaticFunctionName
,所以如果你已经有一个对象,你可以避免指定模板参数,但我个人有偏见地认为在对象上调用静态函数很丑。
如果我是你,我会做的是使函数成为非成员函数(如果需要的话,模板的友元),与你的类在同一个命名空间中。
关于c++ - 模板类中的静态非模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227127/