如何在类中创建模板函数? (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,尽管它不必在类声明本身的主体中。
另一答案
请参见:Templates,template 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 ++)的主要内容,如果未能解决你的问题,请参考以下文章
如何在一个可在外面访问的struct中创建一个可变参数模板?