在类外部定义"templated class"函数

Defining "templated class" functions outside of a class

本文关键字:templated 函数 class 定义 外部      更新时间:2023-10-16

我有这个类

template <class T> class dynamic_array
  {

和这个函数:

void dynamic_array::randorder()
  {
  srand(time(NULL));
  int *ap;
  for(ap=array;k!=array+size;++k){*k=rand();} 
  }

编译器在抱怨我的函数"没有模板参数"。我怎么把这个加进去?

template <class T>
void dynamic_array<T>::randorder()
{
  srand(time(NULL));
  for(int *ap = array; k != array + size; ++k)
  {
    *k = rand();
  }
}

应该是

template <class T>
void dynamic_array<T>::randorder()
  {
...
  }

另外,请记住,如果您需要在不同的.cpp文件中使用该定义,则必须将其放入头文件中。

我假设array必须是T类型的数据成员,所以下面的条件在这里不适用。但是一般来说,如果您看到类模板的某些成员函数不依赖于模板参数,那么将它们分解到非模板基类中是有意义的。它减少了可执行文件的大小,使您的工作更轻松。