140 c++ templates class function
我知道可以制作模板功能:
template<typename T>
void DoSomeThing(T x){}
Run Code Online (Sandbox Code Playgroud)
并且可以创建模板类:
template<typename T>
class Object
{
public:
int x;
};
Run Code Online (Sandbox Code Playgroud)
但是可以创建一个不在模板中的类,然后在该类中创建一个模板的函数吗?即:
//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(){}
};
Run Code Online (Sandbox Code Playgroud)
或类似的程度,类不是模板的一部分,但功能是?
Not*_*ure 112
你的猜测是正确的.你要记住的唯一的事情是,成员函数模板定义(除声明外)应在头文件,而不是CPP,虽然它并没有一定要在类声明本身的身体.
non*_*one 68
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];
}
Run Code Online (Sandbox Code Playgroud)
hey*_*hey 17
最简单的方法是将声明和定义放在同一个文件中,但这可能会导致可执行文件过大。例如
class Foo
{
public:
template <typename T> void some_method(T t) {//...}
}
Run Code Online (Sandbox Code Playgroud)
此外,可以将模板定义放在单独的文件中,即将它们放在 .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);
Run Code Online (Sandbox Code Playgroud)