Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

调用可以和定义或申明不在一起

不分离

申明和定义都放在.h文件中
函数模板

template <typename T>
void testprint(T i)
{
    std::cout << i << std::endl;
}

类模板

template <typename T>
class A
{
    T data;
    void func(){
        //definition
    }
};

分离

需要在.cpp文件中添加实例化申明

函数模板

.h

template <typename T>
void testprint(T i);

.cpp

template void testprint<int>(T i); 这里

template <typename T>
void testprint(T i)
{
    std::cout << i << std::endl;
}

类模板

.h

template <typename T>
class A
{
    T data;
    void func();
};

.cpp

template class A<int>; 这里

template <typename T>
void A<T>::func(){
        //definition
    }

结论

  • 可以不分离就不分离了,实在要分离,如果
  • 有很多模板函数的目标扩展类都是一样的话,可以把它们写成一个模板类的成员函数,这样在cpp文件中写实例化申明的时候只要对类写就可以,而不用对每个函数都写

评论