c++ - 模板类中的静态非模板函数

标签 c++ templates static

首先,我并不是真的有问题,但我喜欢让事情尽可能简单。 我正在使用一个名为 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类型定义为 doubleu32unsigned int .

最佳答案

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

如果我是你,我会做的是使函数成为非成员函数(如果需要的话,模板的友元),与你的类在同一个命名空间中。

关于c++ - 模板类中的静态非模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227127/

相关文章:

c++ - 使用 HPET 时 QueryPerformanceFrequency 是否准确?

c++ - 虚函数声明和定义的困惑

templates - joomla 管理模板未加载,如何手动更改?

c++ - 返回指向对象的指针(C++ 模板)错误

c# - 防止类具有在 C# 中创建的静态实例

java - Android库类的静态变量的生命周期是多少?

c++ - 需要理论帮助阅读文件和东西

c++ - 如何为 Solaris 和 HP-AIX 定义 _FILE_OFFSET_BITS & _LARGE_FILES 宏

loops - ansible 模板循环 jinja2 “我需要用 分隔行,但最后一个条目没有 ,

c - 分配静态内存(作为 malloc 替换)