函数一般定义于头文件.h,实现于cpp;但是如果函数模板也定义与实现分离,就会报错。
模板定义很特殊。由template<…> 处理的任何东西都意味着编译器在当时不为它分配存储空间,它一直处于等待状态直到被一个模板实例告知。在编译器和连接器的某一处,有一机制能去掉指定模板的多重定义。所以为了容易使用,几乎总是在头文件中放置全部的模板声明和定义。
可以在实现所在cpp文件中添加实例化声明:
头文件
template<typename T>
__global__ void func1(const float* a, const int *b,
T *c, int d);
源文件
#include"myhead.h"
__global__ void func1(const float* a, const int *b,
T *c, int d);
{
}
template __global__ void func1<float>(const float* , const int *,
T *, int);
模板类也是如此
template <class T>
class CTest
{
public:
T& get_value();
void set_value(const T& _value);
protected:
T m_value;
};
#include "CTest.h"
template <class T>
T& CTest<T>::get_value(){
return m_value;
}
template <class T>
void CTest<T>::set_value(const T& _value){
m_value = _value;
}
template class CTest<int>;
https://blog.csdn.net/u010029439/article/details/84996482 C++为什么要求把类声明和类实现进行分离?又为什么要求模板类的类声明和类实现要都放在头文件而不能分离? - 哑枫的回答 - 知乎 https://www.zhihu.com/question/270627626/answer/383917556
|