当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 概述:traits是一种特性萃取技术,它在GenericProg
 

 

 ·13球称重问题java实现    »显示摘要«
    摘要: /** * 13球称重问题java实现 * <p>copyright: copyright (c) 2004</p> * @author treerot * @version 1.0 */public class thirteenball { private static class ball { private int weight; public int getwe......
 ·linux 网络的 ipv6 应用    »显示摘要«
    摘要:作者:曹江华 ipv6(internet protocol version 6)协议是取代 ipv4 的下一代网络协议,它具有许多新的特性与功能。由 ip 地址危机产生和发展起来的 ipv6 作为下一代互联网协议已经得到了各方的公认,未来互联网的发展离不开ipv6的支持和应用。ipv6 协议和 ipv4 协议不论在结构上还是系统工具的使用上都不大相同。 linux 是所有操作系统中最先支持 ipv......


Traits技术初探
概述:

traits是一种特性萃取技术,它在generic programming中被广泛运用,常常被用于使不同的类型可以用于相同的操作,或者针对不同类型提供不同的实现.traits在实现过程中往往需要用到以下三种c++的基本特性: 【程序编程相关:远程登录(rlogin)--网络大典

【推荐阅读:编写跨平台Java程序需注意

enum 【扩展信息:远程网络监控管理信息基础(RMON)--

typedef

template (partial) specialization

其中:

enum用于将在不同类型间变化的标示统一成一个,它在c++中常常被用于在类中替代define,你可以称enum为类中的define;

typedef则用于定义你的模板类支持特性的形式,你的模板类必须以某种形式支持某一特性,否则类型萃取器traits将无法正常工作.看到这里你可能会想,太苛刻了吧?其实不然,不支持某种特性本身也是一种支持的方式(见示例2,我们定义了两种标示,__xtrue_type与__xfalse_type,分别表示对某特性支持与不支持).

template (partial) specialization被用于提供针对特定类型的正确的或更合适的版本.

借助以上几种简单技术,我们可以利用traits提取类中定义的特性,并根据不同的特性提供不同的实现.你可以将从特性的定义到萃取,再到traits的实际使用统称为traits技术,但这种定义使得traits显得过于复杂,我更愿意将traits的定义限于特性萃取,因为这种定义使得traits显得更简单,更易于理解,^_^.

举例:

上面提到过,traits可被用于针对不同类型提供不同的实现,那么下面就举两个例子来说明如何实现这一点.

example 1:

假定我们需要为某个类设计一个可以对所有类型(包括普通的int/long...,提供了clone方法的复杂类型ccomplexobject,及由该类派生的类)进行操作的函数clone,下面,先用oo的方法来考虑一下解决方案.看到前面的条件,最先跳进你脑子里的肯定是interface,pure virtual function等等.对于我们自己设计的类ccomplexobject而言,这不是问题,但是,对于基本数据类型呢?还有那些没有提供clone方法的复杂类型呢?(这时候你可能会想,要是java该多easy,所有类都默认从object派生,而object已提供了一个默认的clone方法,但是,要使类真正支持clone,还必须implements cloneable,所以,同样也不能避免这里遇到的麻烦).

下面是一个可能的解决方案:

template <typename t, bool isclonable>

class xcontainer

{

    ...

    void clone(t* pobj)

    {


...   下一页
    摘要:前一段时间我单位的几十台工业机需要同步校时, 故去察看了rfc868, 我就试编了一个获得网络时间的小程序, 大家可以借鉴到自己的同步校时程序, 只是试验,所以程序结构并不严谨, 过一段时间我会把服务器段的代码贴出,今天先发布客户端:#pragma warning(disable: 4530)#pragma warning(disable: 4786) #include <iostream......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE