How to organize the Template Files in C++
来源:互联网 发布:香蕉网络tv免费频道下 编辑:程序博客网 时间:2024/05/01 14:54
Normally you put class definitions in a header file and method definitions in a source file. Code that creates or uses objects of the class #includes the header file and obtains access to the method code via the linker.
But the Template files can not organized like the non-template files. If you define the template class by organizing the declaration file (.h) and the definition file (.cpp) Normally. You will get some linking errors after building the project.
But why templates don't work this way?
The reason is clear:
When the compiler encounters template method definitions, it performs syntax checking, but doesn't actually compile the templates.
When the compiler encounters an instantiation of the template, such as Ruler<int> myRuler, it writes code for an int version of the Ruler template by replacing each T in the template class definition with int.
So, if you don't instantiate a class template for any types in your program, then the class method definitions are never compiled.
Then how to organize the Template Files? There are 3 methods listed below can be used.
1.
You can place the method definitions directly in the same header file where you define the class itself. When you #include this file in a source file where you use the template, the compiler will have access to all the code it needs.
2.
You can place the template method definitions in a separate header file that you #include in the header file with the class definitions. Make sure the #include for the method definitions follows the class definition; otherwise the code won't compile.
But method implementations look strange in header files.
template <typename T>
class Ruler
{
// Class definition omitted for brevity
};
#include " Ruler_Def.h"
3.
You can do by #include the method implementation source file(.cpp) in the template class definition header file, must follows the class definition.
template <typename T>
class Ruler
{
// Class definition omitted for brevity
};
#include " Ruler.cpp"
When using this technique, make sure you don't add the Ruler.cpp file to your project, because it is not supposed to be, and cannot be compiled separately; it should only be #included in a header file.
You can actually call your file with method implementations anything you want. Some programmers like to give source files that are included an .inl extension.
- How to organize the Template Files in C++
- How to Organize Your Files
- [转贴]How To Organize Template Source Code
- How To Organize Template Source Code
- How To Organize Template Source Code
- [Django] Tell your site how to load the template files?
- 编程之美-How To Organize Template Source Code
- How to generate DLL files by GCC in the MinGW?
- MVP for Android: how to organize the presentation layer
- How to Organize your Thesis
- How to Organize your Thesis
- How to organize SSH2 project
- How to get files to show up in the Process Monitor/Report Repository
- How to collect the full path name of the files in ASM diskgroups (文档 ID 888943.1)
- How to collect the full path name of the files in ASM diskgroups (文档 ID 888943.1)
- How to access the keys in dictionary in object-c
- how to use deb files in ubuntu
- How to access files in a jar?
- iPhone的Push(推送通知)功能原理浅析
- CentOS 6.2下搭建phpMyAdmin(mysql的php方式管理工具)
- Oracle中spool命令实现的两种方法比较
- 手Q真的输给微信了吗?
- 记录工作中遇到的一些问题(一)
- How to organize the Template Files in C++
- ural 1028. Stars (线段树)
- 解北大OJ1088滑雪问题的记录
- oracle常用函数
- 安装谷歌商店
- 杭电水题之2023
- 线程 临界区,互斥量,信号量,事件的区别(线程同步)
- 将包中的所有java源文件代码写入一个txt文件中
- 黑马程序员——.NET基础总结(一)