码迷,mamicode.com
首页 > 其他好文 > 详细

分离式模型separation model

时间:2016-04-06 18:23:12      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/19850928sophiling/p/5360196.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!