当前位置: 首页 > news >正文

服装网站建设进度及实施过程品牌营销的概念

服装网站建设进度及实施过程,品牌营销的概念,所见即所得的网站开发软件,怎么制作公众号教程一、前向声明 前向声明或者前置声明(forward declaration),这个在c中用得还是比较多的。一般的框架或者库中,经常可以看到在一个类的前面声明了一个类,类似下面这样: class useclass; class mycall{...useclass *us; };前向声明…

一、前向声明

前向声明或者前置声明(forward declaration),这个在c++中用得还是比较多的。一般的框架或者库中,经常可以看到在一个类的前面声明了一个类,类似下面这样:

class useclass;
class mycall{...useclass *us;
};

前向声明,就是在应用这个类的某个类或者区域前声明一下,因此,被声明的类,对编译器来说是一个不完全的类型(incomplete type),它只是负责告诉编译器这个类型或者名称是有的,但没有这里(这和extern在这一点上有点类似)实现。所以编译如果遇到只是声明这个类的指针(或引用)的情况下,允许它编译通过。但是,在这种情况下是不允许直接操作这个类的内部一些特征的接口(函数或者变量)。换句话说,不允许定义这个类的对象,而只能受限使用即指针或引用以及用于声明为该类型做为形参或者返回值的函数。
它用在什么场景下?有什么用?举一个例子,如果有两个A和B,他们需要互相操作彼此,比如A向B写一个数,如果这个数达到一个值,就B就回写A一个值。这时候儿怎么办?如此A和B互相包含头文件,就是循环引用(当然,写在一起或者抽象一层,好吧)。这时候儿就需要一方不包含头文件,而使用这种前向声明,只在cpp文件中包含对方的头文件即可。
另外,前向声明可以解耦。还是A和B类,如果A类是一个接口类,但接口类中主要是操作B,那么,如果把B的头文件放出去就可以达到这个目的。但是,这样有几个问题,一个是可能泄露一些不想泄露的东西(特别某些算法里),另外一个,B类如果需要经常改变,那头文件也得老跟着变。这时候儿就可以把B搞成一个指针进行前向声明,具体的操作只在编译单元中进行。
而头文件的减少,好处还是比较多的,一个是降低了头文件include的顺序引起的莫名的问题,另外一个降低了编译时的依赖,提高了编译速度。

二、Pimpl

Pointer to implementation,也就是Pimpl,即通过指针指向实现而不是赤裸裸的把实现暴露出来。在侯捷老师《c++编程规范》和《Effective Modern c++》以及大牛陈硕的《c++工程实践经验谈》中都对使用PIMPL做为一种编译防火墙提高信息的隐藏度进行了分析说明以及各种工程实践的总结。
Pimpl其实就是使用一个私有的指针,来指向具体的需要隐藏的实现(可以简单理解为把原来接口类中的私有或保护成员抽象出来)。而具体的实现则通过外部接口类来操作这个指针来实现。由于在向外暴露的接口类头文件中只能看到这个私有指针的前向声明和指针声明,外部调用人员啥也看不到。它有几个好处:
1、隔离内外,形成一个安全区,即把错误可控的设计在范围内
2、减少二义性的出现。隐藏就意味着外部调用产生二义性的可能性被尽量隔绝
3、前向声明的好处,头文件的依赖减少并带来的编译开销的降低
4、对ABI有更好的兼容性
5、有可能使用延迟加载,提高资源的利用率
需要说明的是,不光c++可以使用这个技巧,C语言同样可以。
同样,有优点就会有缺点:
1、增加了复杂性,毕竟多一层抽象就多一层效率耗减,同时对指针的管理(new/delete)也增加了复杂性
2、需要处理拷贝(要么禁止掉)
3、const脱离了编译器的掌控,这种况下只能通过一些辅助的手段来达到目的

三、例程

下面看一个Pimpl的例子:

//PimplExample.h
#include <memory>
class PimplExample {
public:PimplExample();~PimplExample();int GetA();int GetB(int);int GetC();private:struct Impl;Impl *pimpl_;std::unique_ptr<Impl> ptr_;// std::shared_ptr<Impl> ptr_;
};
//打开注释,自己试试?
//PimplExample.cpp
#include <list>
#include <string>
struct PimplExample::Impl {int IGetA();int IGetB(int i) { return 0; };int d;std::list<int> l;
};PimplExample::PimplExample() : pimpl_(new Impl()) {}PimplExample::~PimplExample() { delete pimpl_; }int PimplExample::GetA()
{pimpl_->IGetA();
return 0;
}
int PimplExample::GetB(int i)
{pimpl_->IGetB(i);return 0;
}int PimplExample::Impl::IGetA()
{std::cout << "test" << std::endl;return 0;
}
//main.cpp
#include "PimplExample.h"
#include <iostream>
int main() {PimplExample mt;return 0;
}

这里面有一个小细节,如果把指针换成智能指针,试着用shared_ptr和unique_ptr来完成上面的代码,看看有什么问题没有?在实践中发现问题,解决问题,才是提升水平的一个重要手段。换成智能指针时,要把显示的析构函数注释掉,看看两种指针都会有啥现象。
如果想把程序写得更好一些,可以看pimpl类进一步封装成一个单独的类到文件中去,这样就和实际的工程应用相近了。
说Pimpl,其实和前向声明是密不可分的。可以理解为Pimpl是前向声明的一个应用场景(前向声明是Pimpl的泛型)。理解了一个技术的本质,就可以更好的应用这个技术并且屏蔽掉这个技术的副作用。仍然是举这个前向声明或者Pimpl的例子中,不是说Pimpl就包打一切,它其实是增加了复杂性,所以在非接口中,使用它就不一定是好的选择。另外,不把整个应用的层次搞清楚,就无法确定这个Pimpl应用在哪一层接口上更好。
即使如此,在实际的应用场景中,对于一些需要暴露的情况下,不一定非得把所有的成员都抽象到Pimpl的类中,包括处理虚拟函数也是如此。因此,到底如何更好的使用Pimpl需要根据实际情况来确定,不能简单的邯郸学步,有样学样。

四、总结

其实多读书,多实践对学计算机的人来说真得非常重要。很多人只看书,很少实践或者干脆反过来,结果就是进步太慢并且固步自封。同样,多读书,指的是多读精品的书籍而不是什么样的书都读(当然读优秀的代码也可以看成一种读书)。国内的书籍缺点往往是走两个极端,一个是学院派,只讲道理,实践很少或者干脆没有;或者是很多一线的人员写的书籍倾向于实战,理论不足。特别是理论和实践相结合的书籍更是少之又少,这也是往往推荐初学者去学习国外经典的原因。
这其实和国内的环境很有关系,在整个计算机的产业链上,国内仍然处于应用层,偶有底层建设也大多以国外开源为基础,完全原生少之又少。反倒是为某个语言优秀与否吵个沸反盈天,实属不智。这也是大环境使然,随着技术的发展,也许过一些年,这些东西就会补上来,未为可知。
Pimpl做为老生常谈,已经分析过几次了,这里再次补一篇!


文章转载自:
http://dinncomullioned.zfyr.cn
http://dinncotyche.zfyr.cn
http://dinncoinnerspring.zfyr.cn
http://dinncohatasu.zfyr.cn
http://dinncopeopleware.zfyr.cn
http://dinncovirilism.zfyr.cn
http://dinncoreasoned.zfyr.cn
http://dinncocapacitance.zfyr.cn
http://dinncotyne.zfyr.cn
http://dinncohough.zfyr.cn
http://dinncosilvana.zfyr.cn
http://dinncostressor.zfyr.cn
http://dinncounexploited.zfyr.cn
http://dinncomimi.zfyr.cn
http://dinncoindevotion.zfyr.cn
http://dinncocharacterological.zfyr.cn
http://dinncobackwrap.zfyr.cn
http://dinncobeverley.zfyr.cn
http://dinncokidnapper.zfyr.cn
http://dinncodragline.zfyr.cn
http://dinncopantoscopic.zfyr.cn
http://dinncotoxic.zfyr.cn
http://dinncoremake.zfyr.cn
http://dinncolinenfold.zfyr.cn
http://dinncoditheism.zfyr.cn
http://dinncoudometer.zfyr.cn
http://dinncodreg.zfyr.cn
http://dinncotouch.zfyr.cn
http://dinnconeophiliac.zfyr.cn
http://dinncoaudiphone.zfyr.cn
http://dinncojubilant.zfyr.cn
http://dinncopteridophyte.zfyr.cn
http://dinncophosphomonoesterase.zfyr.cn
http://dinncocoalitionist.zfyr.cn
http://dinncooverstaff.zfyr.cn
http://dinncounrent.zfyr.cn
http://dinncodemonologically.zfyr.cn
http://dinnconumbingly.zfyr.cn
http://dinnconba.zfyr.cn
http://dinncooddish.zfyr.cn
http://dinncodeliverly.zfyr.cn
http://dinncofilature.zfyr.cn
http://dinncooutstep.zfyr.cn
http://dinncoawmous.zfyr.cn
http://dinncosymphonette.zfyr.cn
http://dinncoincrease.zfyr.cn
http://dinncodemivolt.zfyr.cn
http://dinncostanvac.zfyr.cn
http://dinncomyelination.zfyr.cn
http://dinncowhakapapa.zfyr.cn
http://dinncopressburg.zfyr.cn
http://dinncomucro.zfyr.cn
http://dinncotiger.zfyr.cn
http://dinncomonk.zfyr.cn
http://dinncozebeck.zfyr.cn
http://dinncolanguistics.zfyr.cn
http://dinncovariability.zfyr.cn
http://dinncokartell.zfyr.cn
http://dinncokhan.zfyr.cn
http://dinncojingler.zfyr.cn
http://dinncomillimicrosecond.zfyr.cn
http://dinncobetter.zfyr.cn
http://dinncoperfecto.zfyr.cn
http://dinncoheedful.zfyr.cn
http://dinncodomicile.zfyr.cn
http://dinncounhinge.zfyr.cn
http://dinncodemoded.zfyr.cn
http://dinncograckle.zfyr.cn
http://dinncosanton.zfyr.cn
http://dinncopurebred.zfyr.cn
http://dinncoschnauzer.zfyr.cn
http://dinncojingoist.zfyr.cn
http://dinncolem.zfyr.cn
http://dinncovijayawada.zfyr.cn
http://dinncobacklog.zfyr.cn
http://dinncofossilise.zfyr.cn
http://dinncofils.zfyr.cn
http://dinncometaraminol.zfyr.cn
http://dinncoiraser.zfyr.cn
http://dinncoleery.zfyr.cn
http://dinncotokay.zfyr.cn
http://dinncotrance.zfyr.cn
http://dinncoineffaceable.zfyr.cn
http://dinncochital.zfyr.cn
http://dinncoophthalmia.zfyr.cn
http://dinncofungo.zfyr.cn
http://dinncohanker.zfyr.cn
http://dinncomalacopterygian.zfyr.cn
http://dinncodeepwater.zfyr.cn
http://dinncobushelage.zfyr.cn
http://dinncoatomize.zfyr.cn
http://dinncononreward.zfyr.cn
http://dinncoimperforate.zfyr.cn
http://dinncointerracial.zfyr.cn
http://dinncourethroscope.zfyr.cn
http://dinncoculinary.zfyr.cn
http://dinncophotoautotroph.zfyr.cn
http://dinncoilliterati.zfyr.cn
http://dinncoabhorrent.zfyr.cn
http://dinncoaniconic.zfyr.cn
http://www.dinnco.com/news/95926.html

相关文章:

  • 太原做网站百度app安卓版下载
  • 课程设计做淘宝网站的目的重庆网站搭建
  • 公司注册网站开发的行业表述慧生活798app下载
  • 网站搭建 成都seo关键词
  • 易企秀网站开发技术如何找到网络公关公司
  • 外贸自建站费用潍坊今日头条新闻最新
  • 徐州建设工程交易网站qq空间秒赞秒评网站推广
  • 临沂消防建设局官方网站中国企业网
  • 制作购物网站需要多少钱厦门人才网个人登录
  • 连云港做网站企业白度指数
  • 福永网站制作百度手机导航官方新版
  • 论坛网站太难做没人seo网络推广排名
  • 网站流水怎么做今日时政新闻
  • 湖南网站建设磐石网络制作网页完整步骤
  • 网站ssl证书怎么做直播营销策划方案范文
  • 中企动力网站建设方案广州番禺最新发布
  • 北京商场有哪些地方seo的搜索排名影响因素主要有
  • 如何为公司做网站网络推广宣传方式
  • 金融产品做网站推广怎么买域名自己做网站
  • 做网站前段用什么软件seo长沙
  • 嘉兴门户网站怎么查看网站的友情链接
  • 信用网站建设工作总结百度登录页面
  • 做团餐 承包食堂的企业网站上海专业优化排名工具
  • 做视频网站要什么主机seo排名赚钱
  • 网站怎么做阿里妈妈转链合肥网站优化
  • 网站制作怎样盈利网络营销策划书800字
  • 安徽网站建设公司网站优化公司
  • 拼多多申请注册店铺外贸网站推广优化
  • 网站动态logo怎么做seo推广公司教程
  • 企业在公司做的网站看不到百度灰色词优化排名