如何在类中创建模板函数? (C ++)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在类中创建模板函数? (C ++)相关的知识,希望对你有一定的参考价值。

我知道可以制作模板功能:

template<typename T>
void DoSomeThing(T x){}

并且可以创建模板类:

template<typename T>
class Object
{
public:
    int x;
};

但是可以创建一个不在模板中的类,然后在该类中创建一个模板的函数吗?即:

//I have no idea if this is right, this is just how I think it would look
class Object
{
public:
    template<class T>
    void DoX(){}
};

或类似的程度,类不是模板的一部分,但功能是?

答案

你的猜测是正确的。你唯一需要记住的是成员函数模板定义(除了声明)应该在头文件中,而不是cpp,尽管它不必在类声明本身的主体中。

另一答案

请参见:Templatestemplate methods,会员模板,会员功能模板

class   Vector
{
  int     array[3];

  template <class TVECTOR2> 
  void  eqAdd(TVECTOR2 v2);
};

template <class TVECTOR2>
void    Vector::eqAdd(TVECTOR2 a2)
{
  for (int i(0); i < 3; ++i) array[i] += a2[i];
}
另一答案

是的,模板成员函数在很多场合都是完全合法且有用的。

唯一需要注意的是模板成员函数不能是虚拟的。

另一答案

最简单的方法是将声明和定义放在同一个文件中,但它可能会导致超大的可执行文件。例如。

class Foo
{
public:
template <typename T> void some_method(T t) {//...}
}

此外,可以将模板定义放在单独的文件中,即将它们放在.cpp和.h文件中。您需要做的就是明确地将模板实例化包含到.cpp文件中。例如。

// .h file
class Foo
{
public:
template <typename T> void some_method(T t);
}

// .cpp file
//...
template <typename T> void Foo::some_method(T t) 
{//...}
//...

template void Foo::some_method<int>(int);
template void Foo::some_method<double>(double);

以上是关于如何在类中创建模板函数? (C ++)的主要内容,如果未能解决你的问题,请参考以下文章

我将如何在 c 中创建一个输出流,如 stdout?

如何在一个可在外面访问的struct中创建一个可变参数模板?

在 C 中创建模块系统(动态加载)

如何在 selenium c# 中创建自定义显式等待函数,传入 WebElements 而不是 By

Win32 C++ 在类中创建窗口和过程

如何在 TypeScript 中创建自定义类型