C++函数模板声明与定义相分离
作者:网络转载 发布时间:[ 2016/2/22 10:40:33 ] 推荐标签:测试开发技术 .NET
这样三个文件的内容通过include实际上包含在同一个文件里,自然不会出错了。同理,还可以这样
//-------------test.h----------------//
template<class T>
class A
{
public:
void f(); //这里只是个声明
};
#include<test_impl.h>
//---------------test_impl.h-------------//
template<class T>
void A<T>::f()
{
…//do something
}
//---------------main.cpp---------------//
#include”test.h”
int main()
{
A<int> a;
a. f();
}
这两种方法实际上都是包含编译,没有本质的区别,不过感觉第二种方法看起来比较舒服。还有一种比较hack的方法
//-------------test.h----------------//
template<class T>
class A
{
public:
void f(); //这里只是个声明
};
//---------------test.cpp-------------//
#include”test.h”
template<class T>
void A<T>::f()
{
…//do something
}
template class A<int>;
//---------------main.cpp---------------//
#include”test.h”
int main()
{
A<int> a;
a. f();
}
这样由于在test.cpp里实例化了A<int>,所以链接器能够找到相关代码,不会报错。但是这样main函数要用哪种类型的模板都得在test.cpp先实例化,很不方便。
以上都是包含编译的方法,其实C++0x有个export关键字,使模板能分离编译,但是基本没有编译器支持,在c++11中废除掉了,所以这里不提了。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com