分离式模型separation model
1、关键字export
在头文件中定义模板,并且在模板的定义以及声明前添加关键字export。
exported 模板可以直接使用,不需要看到该模板定义。模板的使用和定义可以分割于两个不同的编译单元。在一个编译单元内,只需要将模板的第一个声明加上export即可。以后再次声明或者定义,都会自动加入export关键字。但是,为了程序的可读性,我们提倡在其他地方加上export关键字。
关键字export适用于函数模板,类模板的成员函数、成员函数模板,类模板的静态类成员函数。export也可以用于类模板声明中,导出所有可以被导出的成员函数,但是类模板本身不会被导出。模板类的inline成员函数不会被导出。
export template<typename T>
class MyClass
{
public:
void memfun1();//会被导出
void memfun2() //不会被导出,因为为隐式inline
{...}
void memfun3();//不会被导出,因为明确为inline,见其定义
...
};
template <typename T>
inline void MyClass<T>::memfun3(){}
关键字export和inline不能并用,并且export应该在template前。
template <typename T>
class MyClass
{
public:
export void fun(T); //错误,因为export应该在template前
};
export template<typename T>
inline void MyClass<T>::fun(T){...}//错误,因为export不能喝inline合用
2、分离式模型局限
A:export现在使用的公司很少,其并没有像其他的C++标准一样被广泛应用,当前关于export的经验比较少。
B:export使用存在两个问题:何时实例化模板;何地实例化模板。当包含该模板定义的文件发生变化,该文件以及所有实例化该模板的文件都需要重新编译。且分离模式在源码角度上没有那么明显。这样的后果是:许多以源码级技术来管理关系的工具如make等,如果像对待非模板程序一样对待export 模板程序,将无法运作。
3、为分离模型作准备
为了置入式模型和分离式模型间快速的切换,可以使用预处理指令。具体操作如下:
//MyFirst4.H
#ifndef MYFIRST4_H
#define MYFIRST4_H
#if defined(USE_EXPORT)
#define EXPORT export
#else
#define EXPORT
#endif
//模板声明
EXPORT
template <typename T>
void fun(T);
//如果没有定义USE_EXPORT,就将模板定义包含进入
#if !defined(USE_EXPORT)
#include "MyFirst.h"
#endif
#endif //MYFIRT4_H
分离式模型separation model的更多相关文章
- thinkphp模型层Model、Logic、Service讲解
thinkphp模型层Model.Logic.Service讲解 时间:2014-08-24 15:54:56 编辑:一切随缘 文章来源:php教程网 已阅读:771 次 js特效 ...
- Scikit-learn:模型评估Model evaluation
http://blog.csdn.net/pipisorry/article/details/52250760 模型评估Model evaluation: quantifying the qualit ...
- 盒子模型(Box Model)
盒子模型(Box Model) ■ 盒子模型——概念 在网页设计中常用的属性名:内容(content),填充(padding),边框(border),边界(margin),CSS 盒子模式都具备这些属 ...
- 使用 Jackson 树模型(tree model) API 处理 JSON
http://blog.csdn.net/gao1440156051/article/details/54091702 http://blog.csdn.net/u010003835/article/ ...
- css盒模型(Box Model)
所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和 ...
- HTML和CSS的盒子模型(Box model)
本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键—盒子模型(Box model). 理解Box model的关键便是margin和padding属性, 而正确理解这两个属性也是学习用css ...
- ORM之模型对象Model
模型对象Model Odoo的模型对象在odoo模块的models.py文件中,最基础的对象是BaseModel; Odoo的模型对象有三个:AbstractModel.Model.Transient ...
- Django模型(model)系统
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- 教你吃透CSS的盒子模型(Box Model)
CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...
随机推荐
- 循序渐进Python3(十一) --3-- web之dom
DOM 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的 ...
- SeekBar 圆角问题
用图片做背景色,最后处理成.9.png的.用普通png图片做背景,则两边会有圆角出现,原因是图片不适合SeekBar尺寸,因而被拉伸或压缩,从而产生圆角. <?xml version=" ...
- 如何让textarea不可拖拽
文本域textarea有一个特性,就是可以拖拽改变其大小,但是在布局严格要求的页面中,这种特性显然会影响布局. 一行代码就可以搞定: textarea{ resize:none;} 但是在chrome ...
- VScode常用几个前端插件live HTML previewer和debugger for chrome的配置
之前一直都是用sublime Text和chrome配合来写前端的页面,自从知道了有liveReload这个神奇的插件之后感觉爽翻了啊.好吧跑远了........ 话说最近微软搞了个VScode,听说 ...
- MM常用BADI
1.删除采购申请BADI BAPI_REQUISITION_DELETE 但是需要输入采购申请 和采购申请行项目号
- Coursera Machine Learning : Regression 简单回归
简单回归 这里以房价预测作为例子来说明:这里有一批关于房屋销售记录的历史数据,知道房价和房子的大小.接下来就根据房子的大小来预测下房价. 简单线性回归,如下图所示,找到一条线,大体描述了历史数据的走势 ...
- 07-JAVA继承与接口
动手动脑: 源程序: public class FuGai { public static void main(String[] args) { // TODO Auto-generated meth ...
- IE10一下的img标签问题
之前写过的一段简单的demo,后来在IE10以下使用的时候发现无法使用,先上一段代码 HTML: <div class="all" id="box"> ...
- asp.net程序集冲突解决笔记(未能加载文件或程序集"XXXXXXXXX")
先来看张截图.(未能加载文件或程序集”System.Web.Razor“) 先说一下我的情况.(扯蛋的,解决方法还在下面 —> _ < ) 这是 ASP.NET MVC 的东西.老大写了一 ...
- html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器
以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...