C++模板源代码组织结构 -- 显式实例化


// test_include.hpp 模板类声明
 
#ifndef TEST_INCLUDE_H
#define TEST_INCLUDE_H

template<class T>
class test
{
public:
  void Show();  
};

#endif
// test_includedef.hpp 模板类的定义
#ifndef TEST_INCLUDEDEF_H
#define TEST_INCLUDEDEF_H

#include "test_include.hpp"
#include "iostream"

template<class T>
void test<T>::Show()
{
	std::cout << "Test Show()" << std::endl;
}

#endif
// test_include_inst.cpp 模板类的显式实例化
#include "test_includedef.hpp"

template test<int>;
template void test<int>::Show();
// test_includetest.cpp 模板类的使用
#include "test_include.hpp"


int main()
{
    test<int> t;
	t.Show();

//  下面这个会报错,因为没有包含模板类的实现代码,只包含了它的声明,而 test_include_inst.cpp 显式实例化只是定义了针对 int 类型的处理
 	test<float> t1;
 	t1.Show();

}

题外话,还有一种模式是分离模式,但是因为关键字export只有极少数编译器支持[vs2010/vs2015/gcc/g++经测试都不支持],所以这种模式的就不做讨论了

暂无评论

注册用户登录后才能发表或者回复评论,请先登录 注册。