加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

轻量级程序扩展

发布时间:2020-12-16 22:21:19 所属栏目:大数据 来源:网络整理
导读:考虑有一个类里有私有变量:vectorA m; vectorB b; vectorC c; 请提供一个接口,可以获得该类的这三个变量。 方案一: VA get(XX); VB get(XX); VC〉get(XX); XX用来区分类型。 或者 VA get_A(XX); VB get_B(XX); VC〉get_C(XX); 用函数重载或不同函数名区分

考虑有一个类里有私有变量:vector<A> m; vector<B> b; vector<C> c; 请提供一个接口,可以获得该类的这三个变量。

方案一:

V<A> get(XX);
V<B> get(XX);
V<C〉get(XX);

XX用来区分类型。

或者

V<A> get_A(XX);
V<B> get_B(XX);
V<C〉get_C(XX);

用函数重载或不同函数名区分,并提供了对外接口用于获得相关数据。

MFC就是用不同函数名区分以获得相关数据的。GetLong,GetString... 等等。

但是个人感觉这样的设计并不好。

试想一下,原先设计为私有的, 现在却提供一个公开接口出去。。。 而且你的意图仅仅是想简单的获得数据,现在却为了这点轻量级的用途,直接增加这个类的功能。。。这种设计构成了这个类的臃肿,复杂度, 而且偏离了原有的设计方向。(数据成员设计为私有的,通过接口访问,并不是外面访问不到,而是通过接口访问,这样就保护了数据成员,省得你就算改一个成员名,就要重新修改大量代码。)

更好的方法应该是这样:

templete<class _T> struct get{}
templete<> struct get<A>{ v<A> operator(){}; }
templete<> struct get<B>{ v<B> operator(){}; }
templete<> struct get<C>{ v<C> operator(){}; }

通过模板的偏特化,实现类型的swtich功能。
然后友元化这个模板。

这样,新增的取数据功能,是不会影响到原有类的复杂度的。实现也满足了我们一个轻量级取数据的需求。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读