Slice 定义由编译器编译到特定的实现语言 。编译器把与语言无关的定
义翻译成针对特定语言的类型定义和 API。开发者使用这些类型和 API 来
提供应用功能,并与 Ice 交互。用于各种实现语言的翻译算法称为语言映射(language mappings)    
    SLice作用:
        编写接口定义,并由ice提供的对应工具,生成对应的接口声明文件。然后由服务端实现,客户端调用。
        详细可以参见:http://www.cnblogs.com/zhangronghua/tag/ice/       
    注意:
            slice文件的后缀名必须小写,且为ice
    slice的预处理命令:
        #ifndef、#define、#endif
    文件包含命令:
        #include<文件.ice> 。
    注意
        1 slice中不存在#include" "写法
        2 文件包含命令只能位于文件开头
 
    注释:
         // 你好
        /*你好*/
    自定义标识符:可以包含 字母、数字
        注意:
            1     不能包含下划线
            2    大小写不敏感,但是大小写要保持一致。也就是申明了一个标识符为A时,在其他地方也得用A,而不能用a,否则编译报错
            3    和特定语言有关键字冲突时,会被自动重命名
            4    在标识符前面加“\”,可以去掉关键字含义。例如struct \dictionary {/* OK*/};
    被保留的标识符:
            1 Slice 为 Ice 实现保留了标识符 Ice 及以 Ice (任何大小写方式)起头的所有标识符
            2 以下面任何一种后缀结尾的 Slice 标识符也是保留的:Helper、Holder、Prx,以及 Ptr。Java 和 C++ 语言映射使用了这些后缀,保留它们是为了防止在生成的代码中发生冲突。
    数据类型:
        bool,byte,short,int,long,float,double,string
    枚举定义:
        enum enumName{n1,n2}
        注意: slice不支持指定各个枚举项的具体值,也就是enum enumName{n1=1,n2=2} 是不合法的
    结构体定义:持含有一个或多个有名称的成员的结构,这些成员可以具有任意类型,包括用户定义的复杂类型.如下:
        struct structName{short s1,string s2,enumName e1}
    序列:变长的元素向量。序列可以是空的——也就是说,它可以不包含元素;它也可以持有任意数量的元素,直到达到你的平台的内存限制。
        sequence<Fruit> FruitPlatter;
    词典:是从键类型到值类型的映射
struct Employee {
long
number;
string firstName;
string lastName;
};
dictionary<long, Employee> EmployeeMap;

常量定义:常量定义的类型必须是以下类型中的一种:

• 整型 (bool、byte、 short、int、long,或枚举类型)
• float 或 double
• string
如:const bool AppendByDefault = true;

接口定义:

struct TimeOfDay {
short hour;
// 0 - 23
short minute;
// 0 - 59
short second;
// 0 - 59
};
interface Clock {
TimeOfDay getTime();
void setTime(TimeOfDay time);
};

参数与返回值:必须指定返回值

        在缺省情况下,参数会从客户发往服务器,也就是说,它们是输入参数。要把值从服务器传到客户,你可以使用输出参数,这种参数用 out 关

键字指示。例如,你可以用另外一种方式定义第 70 页上的 getTime 操作:void getTime(out TimeOfDay time);
        注意:所有输入参数均在输出参数前面
        Slice 不支持任何形式的操作重载
    函数操作符:        
        nonmutating操作符:对应c++的const的函数操作
        idempotent:idempotent 关键字表明某个操作可以安全地多次执行。(Ice run time 利用这一知识来更积极地进行错误恢复)

ICE系列之3对象接口定义语言——slice的更多相关文章

  1. javascript系列之变量对象

    原文:javascript系列之变量对象 引言 一般在编程的时候,我们会定义函数和变量来成功的构造我们的系统.但是解析器该如何找到这些数据(函数,变量)呢?当我们引用需要的对象时,又发生了什么了? 很 ...

  2. lodash用法系列(2),处理对象

    Lodash用来操作对象和集合,比Underscore拥有更多的功能和更好的性能. 官网:https://lodash.com/引用:<script src="//cdnjs.clou ...

  3. ADO.NET系列之Connection对象

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 ADO.NET概念 ADO ...

  4. ADO.NET系列之Command对象

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 上一篇<ADO.NE ...

  5. ADO.NET系列之DataAdapter对象

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 我们前两篇文章介绍了ADO ...

  6. Java并发编程锁系列之ReentrantLock对象总结

    Java并发编程锁系列之ReentrantLock对象总结 在Java并发编程中,根据不同维度来区分锁的话,锁可以分为十五种.ReentranckLock就是其中的多个分类. 本文主要内容:重入锁理解 ...

  7. ICE系列之2——ICE的服务与好处

    ice服务: IcePack         我们在第 12 页提到过, IcePack 是 Ice 的定位服务,用于在使用间接绑定时把符号性的 (symbolic)适配器名解析为协议-地址对. 除了 ...

  8. Ice系列--基于IceGrid的部署方案

    前言 前一篇文章介绍了IceGrid的简单应用.这篇文章来介绍一下它的高端玩法-如何将模板,复制组,知名对象应用于部署方案及其作用. 基于模板的部署方案 之前介绍了xml格式的配置文件通过各种描述符如 ...

  9. Azure Messaging-ServiceBus Messaging消息队列技术系列4-复杂对象消息是否需要支持序列化和消息持久化

    在上一篇中,我们介绍了消息的顺序收发保证: Azure Messaging-ServiceBus Messaging消息队列技术系列3-消息顺序保证 在本文中我们主要介绍下复杂对象消息是否需要支持序列 ...

随机推荐

  1. Eclipse中FindBugs插件的应用

    在以前的一个开发现场里,经常会收到客户的代码review指摘. 觉得有点神奇是,给客户的文件是编译后的*.class打成war包,客户那边却能指摘出代码中的缺陷bug,而且精确到代码的某一行. 通过* ...

  2. django Q和F查询

    Q查询——对对象的复杂查询F查询——专门取对象中某列值的操作 Q查询1.Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询,例如: from django. ...

  3. GTD一些问题

    一."大局"与事物的本质1,在处理每天.每小时的事务时,有很多干扰因素分散了我们的注意力,以致我们无法集中足够的精力关注更重要的问题.2,一种下意识的抵触情绪,在面对那些原本棘手的 ...

  4. Embed dll Files Within an exe (C# WinForms)—Winform 集成零散dll进exe的方法

    A while back I was working on a small C# WinForms application in Visual Studio 2008. For the sake of ...

  5. Spark SQL External Data Sources JDBC官方实现读测试

    在最新的master分支上官方提供了Spark JDBC外部数据源的实现,先尝为快. 通过spark-shell测试: import org.apache.spark.sql.SQLContext v ...

  6. ubuntu NTP server 搭建

    ubuntu server ntp时间同步服务器安装及使用一.服务端1 apt-get install ntp 2 安装后默认启动服务,如果没有启动,启动之. /etc/init.d/ntp star ...

  7. Ping 命令的使用方法总结

    一.Ping 命令 “Ping”命令是我们在判断网络故障常用的命令,但您真正明白这个命令运行后会发生什么,以及出现的各种信息说明了什么吗?其实熟练的掌握 Ping 命令的各种技巧可以帮助你解决很多网络 ...

  8. Flex 加载tiff

    gis系统常常要加载tiff,因为好多土地证书,各种文件都是扫描件,如果你是用as来写的前台,怎么加载呢,顺便说下用插件AlternaTIFF也是可以得不过浏览器加载这么多插件是不太好的. 首先TIF ...

  9. express 手动删除session状态(即登出功能)

    在退出按钮被点击后,发送请求/logout,服务端做如下处理: app.get('/logout', function() { delete req.session.user; return res. ...

  10. C#开发Windows服务 附简单实例实现禁止QQ运行

    本实例主要实现下面三个基本功能 1.C#开发windows服务 2.禁止QQ等程序运行 3.为windows服务创建自动安装程序 下面针对这三个基本功能进行实现 一.C#开发windows服务 Win ...