vc++ 尝试类型无关的属性包

前言:

     在编制稍微大型的类时,为了使类更加灵活,通常需要加入很多的成员变量,这样做会很有弊端,因为如果需求发生了变化,那么类里的成员变量也会发生变化,这样就导致了该类需要重新编译,那么应用程序中与该类相关的所有有联系的类(即使用了该类的头文件)都必须重新编译过,这样会带来潜在的错误风险。

 

一.目标

既然现代的编程方法强调可重用和可扩展,那么我们现在就可以先来尝试一下怎样在:

        1. 不需要修改接口

        2. 类型无关(即能接受任意类型)

 

二.设想

    如果接触过vb,那么vb里面使用的collection应该不会陌生,据了解应该是使用safarray和Varaiant,而我们今天需要使用其他的途径来实现它。

    1.通过形如"PropertyBag['ServerName'] = 'localserver'"的方式实现调用。

    2.通过形如"PropertyBag[SERVER_NAME]='localserver'"的方式实现调用。

在第二种方式中使用的是预先定义的参数标号作为索引,这种方法在速度上比第一种迅速,但是从扩展性的角度上看是不能满足我们的目标的。

    所以我们来尝试第一种方案。

    最后完成的调用方式如下:

    CPropertyBag bag;

    bag["ServerPort"] = CProperty<int>(80);

    bag["ServerName"] = CProperty<string>("localhost");

...

    int iSvrPort = CProperty<int>(bag["ServerPort"]);

    string sSvrName = CProperty<string>(bag["ServerName"]);

任何类型采用即用即实现转化的过程

三.设计

    1.属性包嘛,为了与类型无关,必须与所有类型都兼容,那就剩下void*了,在这里我们可以使用vector<char>作为一种载体存放在CDataCan里面

class CDataCan

{

 ...

vector<char> m_data; // store data

string m_sType; // store typename, come from typeid(...).name

}

class CPropertyBag

{

     ...

    CDataCan m_data;

...未完...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值