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的更多相关文章

  1. thinkphp模型层Model、Logic、Service讲解

    thinkphp模型层Model.Logic.Service讲解 时间:2014-08-24 15:54:56   编辑:一切随缘   文章来源:php教程网 已阅读:771 次       js特效 ...

  2. Scikit-learn:模型评估Model evaluation

    http://blog.csdn.net/pipisorry/article/details/52250760 模型评估Model evaluation: quantifying the qualit ...

  3. 盒子模型(Box Model)

    盒子模型(Box Model) ■ 盒子模型——概念 在网页设计中常用的属性名:内容(content),填充(padding),边框(border),边界(margin),CSS 盒子模式都具备这些属 ...

  4. 使用 Jackson 树模型(tree model) API 处理 JSON

    http://blog.csdn.net/gao1440156051/article/details/54091702 http://blog.csdn.net/u010003835/article/ ...

  5. css盒模型(Box Model)

    所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和 ...

  6. HTML和CSS的盒子模型(Box model)

    本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键—盒子模型(Box model). 理解Box model的关键便是margin和padding属性, 而正确理解这两个属性也是学习用css ...

  7. ORM之模型对象Model

    模型对象Model Odoo的模型对象在odoo模块的models.py文件中,最基础的对象是BaseModel; Odoo的模型对象有三个:AbstractModel.Model.Transient ...

  8. Django模型(model)系统

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  9. 教你吃透CSS的盒子模型(Box Model)

    CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...

随机推荐

  1. 小白如何进入IOS,答案就在这里

    ***对于进来看过我博客的博友们,请看一下最后面的几道题,觉得可以的可以自己私下做一下,有不懂的我们可以相互交流*** 现在我来说一下我们IOS需要的基础,现在用的比较多的就是swift语言. 首先, ...

  2. map创建JSONObject对象

    public static void mapToJSONObject(){ Map<String, Object> map = new HashMap<String,Object&g ...

  3. List<Object> to JSONArray一

    package com.beijxing.TestMain; import java.util.ArrayList; import java.util.List; import com.beijxin ...

  4. 搭建angular2环境(1)

    1.安装node(windows环境) 进入node官网https://nodejs.org/en/下载好后直接安装就可以了.安装完成之后可以在命令窗口查看安装的版本 2.安装npm express ...

  5. silverlight调用webservice跨域

    下载下面的任何文件放在webservice的根目录下 http://files.cnblogs.com/files/jichunhu/crossdomain.xml http://files.cnbl ...

  6. react js 之生命周期

    react redux 结合是目前比较流行的前端开发框架,主要基于react 中的state 树为数据模型,借助redux 来控制 state 数据:下面直接从代码层面解析该框架中一个react 组件 ...

  7. datastage小结

    1.当使用datastage组建 look_up时,得注意sparse功能,当primary link过来的数据关联不到时,传过来的值并不是null,而是空串.... 解决方法,可在transfer里 ...

  8. linux grep -I 属性

    忽略大小写的查找: grep -i 'address' test.log --> address ADDRESS

  9. 反汇编工具capstone安装后import error

    使用sudo pip install capstone后,使用如下代码import时出现error. from capstone import * 错误信息: File "/usr/loca ...

  10. js中的call与apply深入浅出

    首先明确call()与apply()最大的区别,除了名字不同以外,就是参数不一样,call的参数需要一一列出,apply的第二个及其以后的参数需要组成一个数组传进来. 这两个函数的调用者不是对象,而是 ...