关于C++中的包含编译模型和分别编译模型
来源:互联网 发布:eia天然气库存数据 编辑:程序博客网 时间:2024/05/07 14:52
这段时间在学习C++中的模板,在网上看到有对"包含编译模型"和"分别编译模型"的说法:
看C++ templates吧,里面对这个问题讨论得很详细。
包含编译模型就是类模板的声明和定义放在一个头文件里
分离模型就是和将声明与实现分开
不过要用到export关键字
根据我对书中内容的理解:
标准C++为编译模板定义了两种模型:包含模型和分别模型,这两种方式很大程度上是相同的:类定义和函数声明
放在头文件中,而函数定义和成员定义放在源文件中.这两种模型不同之处在于,编译器怎样使用来自源文件的定义而已.
对"包含编译模型",可以通过在声明函数模板或类模板的头文件中添加一条#include指示使定义可用,
从而引入包含相关定义的源文件.如下:
---------------------
// header file utlities.h
#ifndef AAAA_H
#define AAAA_H
template <class T> int compare(const T&, const T&);
......
#include "utilities.cc"
#endif
=======---------------
//implementation file utlities.cc
template <class T> int compare(const T &v1,const T &v2)
{
//implemente
......
}
-------------------
这一策略使我们能够保持头文件和实现文件分离.
本书的作者并不是说"包含编译模型"就是将申明和定义放在同一个头文件中.这里分别放在了utlities.h和utlities.cc中,
只是在utlities.h时用了#include "utlities.cc".
而"分离编译模型"只是在使用了关键字"export"来告诉编译器模板定义在哪里引用.
如果在头文件类声明中使用了export,则该头文件只能被源文件使用一次;
如果在实现文件中使用了export,有两种情况:
一种是在实现文件的开头加上
export template <class Type> class Xxxx;
#include "Xxxx.h"
//others definitions
....
这类情况中,导出类成员都会自动声明为导出.
另一种情况就是对个别成员声明要导出的,只能对个别成员使用export.
"包含编译模型"并不是类模板的声明和定义放在一个头文件里;
"分离编译模型"也并不是将申明和定义分开.
- 关于C++中的包含编译模型和分别编译模型
- dev C++ 模板中的分别编译-- “包含”模型的一种解决方法
- 包含编译模型
- C++模板编译模型:包含编译模型
- C++模板编译模型:包含编译模型
- 包含编译模型(学习笔记,其他地方参考)
- Tensorflow C++ 编译和调用图模型
- Tensorflow C++ 编译和调用图模型
- 模板编译模型
- 模板编译模型
- 模板编译模型
- gcc编译过程模型
- 模板编译模型
- 模板编译模型
- 模板编译模型
- 模板编译模型
- c++编译模型
- 模板编译模型
- JFreeChart使用心得与例子
- N5230A PNA-L 网络分析仪
- C/C++ 知识小卡片
- membership 的 providers 的 add 元素(ASP.NET 设置架构)
- 使用ASP.NET读取XML文件
- 关于C++中的包含编译模型和分别编译模型
- AGILENT HP8753ES/8753ET网络分析仪租售13510733472张生
- 深入探讨JavaMail API的使用
- C#中如何创建、生成以及使用DLL
- GridView 应用面面观,
- 模范正版galgame玩家鉴赏
- Linux下cpuinfo文件各项参数的详细说明(目前来说可能是最全的)
- CWnd::OnSysCommand
- 答一网友csdn中一问题: