两种编译模式:
---------
C++ Primer 第三版 中文版
10.5 模板编译模式:
"C++支持两种模板编译模式包含模式Inclusion Model 和分离模式Separation Model"
10.5.1 包含编译模式
"在包含编译模式下我们在每个模板被实例化的文件中包含函数模板的定义并且往往把定义放在头文件中像对内联函数所做的那样"
10.5.2 分离编译模式
"在分离编译模式下函数模板的声明被放在头文件中"
"在模板定义中有一个关键字export"
"关键字export 告诉编译器在生成被其他文件使用的函数模板实例时可能需要这个模板定义编译器必须保证在生成这些实例时该模板定义是可见的"
"关键字export 不需要出现在头文件的模板声明中"
"分离模式使我们能够很好地将函数模板的接口同其实现分开进而组织好程序以便把函数模板的接口放到头文件中而把实现放在文本文件中但是并不是所有的编译器都支持分离模式即使支持也未必总能支持得很好支持分离模式需要更复杂的程序设计环境所以它们不能在所有C++编译器实现中提供"
"Inside the C++ Object Model 描述了一个C++编译器the Edison Design Group compiler支持的模板实例化机制"
-----------
到2008不支持....
2010卸了没试
-----------
警告 1 warning C4237: 目前还不支持“export”关键字,但已保留该关键字供将来使用 x:\xxxx\xxxx\list.cpp 3 xxxx
要调用模板方法,必须在调用模块有其定义。因为模板方法由于参数类型不确定,本身就不能编译为单一的可执行代码。
普通函数可以在别的模块(CPP文件)编译,然后可链接定位到。
但模板(泛型)方法不可单独编译,只能在调用时,将特定参数类型代入模板,形成一个具体函数,该函数才可编译。而编译该具体函数又不可脱离模板函数的具体定义。
必须将实际调用参数及类型传入模板方法定义后,才能形成一个特定的方法。所以要调用模板方法的地方,必须知道其定义才行。
模板类似于宏,只是形式更规范,多了一些类型检查机制。
项目 属性 配置属性 C/C++ 代码生成 运行库 多线程调试 MDd (我用的是MDd,你也可以看下另一个多线程调试是否能用)
把类(函数)声明的.h文件引用 放到 stdafx.h或者 有MAIN()的文件中