分离式模型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

时间: 2024-10-12 20:41:51

分离式模型separation model的相关文章

模型绑定(Model Binding)

模型绑定是值用浏览器以HTTP请求方式发送数据来创建.NET对象的过程.(负责生成适当的动作方法参数值) 动作调用器(Action Invoker):调用控制器的动作方法的组件,负责在调用动作方法之前获取动作方法的参数值. 默认的动作调用器(ControllerActionInvoker)依赖于模型绑定器,而模型绑定器(Model Binder)是有IModelBinder接口定义的. public interface IModelBinder { object BindModel(Contro

盒子模型(Box Model)

盒子模型(Box Model) ■ 盒子模型--概念 在网页设计中常用的属性名:内容(content),填充(padding),边框(border),边界(margin),CSS 盒子模式都具备这些属性. 细节说明: ?html 元素都可以看成一个盒子 ?盒子模型的参照物不一样,则使用的 css 属性不一样.比如:从 div1 的角度看,是 margin-right,从 div2 看,则是 margin-left. ?如果你不希望破坏外观,则尽量使用 margin 布局,因为 padding 可

判别式模型和产生式模型 (discriminative model and generative m

最经典的莫过于 Andrew Ng在NIPS2001年有一篇专门比较判别模型和产生式模型的文章: On Discrimitive vs. Generative classifiers: A comparision of logistic regression and naive Bayes (http://robotics.stanford.edu/~ang/papers/nips01-discriminativegenerative.pdf) 转: 判别式模型和产生式模型 (discrimin

CSS 框模型(Box Model)

CSS 框模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容. 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素. 下面的图片说明了框模型(Box Model): 不同部分的说明: Margin - 清除边框区域.Margin没有背景颜色,它是完全透明 Border - 边框周围的填充和内容.边框是受到盒子的背景颜

模型验证(Model Validation)

用户输入的数据并不一定是我们能够操作的数据,这样就需要我对用户输入的数据进行验证.这样就有的我们这里说的额模型验证(Model Validation). 模型验证:确保我们所接收到的数据适用于绑定到模型,并在不合适时,给用户提供用有的信息,以帮助用户修正问题的过程. 该过程的第一部分:检查接收的数据,并保证数据的完整性,正确性. 该过程的第二部分:帮助用户修正问题. 一:明确的验证模型 验证一个模型最直接的方法是在动作方法中做这种事情. public ActionResult Index(Per

Django - 模型(model)-- ORM

一.ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库层之间充当了桥梁的作用 ORM由来 让我们从O/R开始.字母O起源于"对象"(Object),而R则来自于"关系"(Relational). 几乎所有的软件开发过程中都

第一章:模型层model layer

模型和字段 一个模型(model)就是一个单独的.确定的数据的信息源,包含了数据的字段和操作方法.通常,每个模型映射为一张数据库中的表. 基本的原则如下: 每个模型在Django中的存在形式为一个Python类 每个模型都是django.db.models.Model的子类 模型的每个字段(属性)代表数据表的某一列 Django将自动为你生成数据库访问API 当你每次对模型进行增.删.修改时,请务必执行命令python manage.py migrate,让操作实际应用到数据库上. 这里可以选择

判别模型(Discriminative model)和生成模型(Generative model)

在前面的章节中,我们介绍过SVM.逻辑回归,这两者都属于监督学习中的一种,即训练数据的标签是给定的,我们希望通过对训练数据进行学习,这样对于给定的新样本数据,我们可以对它的类别标签进行预测.实际上,监督学习又可以分为两类,判别模型(Discriminative model)和生成模型(generative model),前面提到的SVM和逻辑回归都属于判别模型的一种.那么判别模型和生成模型有何区别? 1.1 判别模型和生成模型的区别 我们先来看以前讲过的SVM和逻辑回归(LR)有什么特点.这两者

模型(Model)类

在这个例子里,描述算法的类就叫模型类.而这个例子实现的功能比较简单,主要实现用户点击窗口之后,在窗口上画线,并把所有画的线记录起来,以便窗口刷新时还可以显示出来.要实现这个目标,需要使用数据结构来保存直线的起始和终点位置.而负责这方面工作的,就是模型类.模型类设计上,使用了Python里内置类型列表来保存所有坐标点属性.这个例子的代码如下: #开发人员:蔡军生(QQ:9073204) 深圳 2014-9-6 #模型类 class Model: def __init__(self): self.p