如何在类中创建模板函数? (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(){}
};

或者在某种程度上,类不是模板的一部分,但是函数是?

209587 次浏览

看这里: 模板模板方法,成员模板,成员函数模板

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];
}

你的猜测是正确的。您必须记住的唯一一件事情是,成员函数模板 定义(除了声明之外)应该位于头文件中,而不是 cpp 中,尽管 没有必须位于类声明本身的主体中。

是的,模板成员函数在许多情况下都是完全合法和有用的。

唯一的警告是模板成员函数不能是虚函数。

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

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

此外,还可以将模板定义放在单独的文件中,即将它们放在。中央结算及交收系统。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);