网站建设应该注意什么wordpress 旋转加载
2026/4/15 11:06:47 网站建设 项目流程
网站建设应该注意什么,wordpress 旋转加载,网站建设最重要的环节,广州品牌设计工作室一、链式调用 在前面的文章中#xff0c;已经对链式调用有了不少的了解。比如“ this指针”和“设计模式”以及C23中显式this等文章中都多少有些涉及。但实际上#xff0c;C对链式调用的支持并不多给力。如果有Java特别是Kotlin语言开发经验的#xff0c;对链式调用应该是非…一、链式调用在前面的文章中已经对链式调用有了不少的了解。比如“ this指针”和“设计模式”以及C23中显式this等文章中都多少有些涉及。但实际上C对链式调用的支持并不多给力。如果有Java特别是Kotlin语言开发经验的对链式调用应该是非常容易理解的。所谓链式调用就是像链表一样将函数的调用连接起来即可以连续调用多个函数。它让代码看起来更直白、易维护。不过如果调用链太深反而让开发者有点感觉到莫名其妙。这也是事物的两面性吧。链式调用更符合自然语言所以在一些函数编程语言以及高级语言中应用非常广泛。C中的链式调用应用并没有其它语言那么广泛这也是C语言本身的一些特点和应用场景限制的。二、运行机制和原理链式调用的原理本质是对对象引用或指针的控制和处理。链式调用需要在每次完成后继续调用相关的函数就必须得到函数所在的对象进而才能够进行下一步的函数调用。所以链式调用的核心机制就是保证必须能够通过上一个函数调用返回应用对象的引用或指针从而确保连续调用的函数影响作用到对象的同一实例某些扩展实现可能不是这种情况。三、实现方式实现链式调用对于C这类语言来说并不复杂但也并如函数式语言那么简单。其主要的实现方式包括对象引用和指针的操作在函数的返回值中通过返回指针this或 引用*this的方式来传回同一对象实例。这是最常用的方法class Demo{public:Demo*setColor(intv){color_v;returnthis;}Demo*setHigh(intv){high_v;returnthis;}private:intcolor_0;inthigh_160;};intmain(){Demo d;d.setColor(255)-setHigh(180);return0;}流畅接口实现Fluent Interface流畅式接口的设计实现其实更倾向于从逻辑上对链式调用的实现实际实现并未脱离链式调用实现的基本方法。以一个电商的操作为例#includeiostream#includestring#includevectorclass OnShoppingCart{private:std::vectorstd::stringitemName_;std::string userName_;public:OnShoppingCartgetUser(conststd::stringuserName){userName_userName;return*this;}OnShoppingCartaddItem(conststd::stringitemName){itemName_.push_back(itemName);return*this;}};intmain(){OnShoppingCart cart;cart.getUser(iPad).addItem(iPhone).addItem(iWatch);return0;}运算符重载实现这种实现非常常见比如std::cout中对操作符的重载看下面的简单例子#includestringclass Demo{public:Demo*setColor(intv){color_v;returnthis;}Demo*setHigh(intv){high_v;returnthis;}Demooperator(conststd::stringmsg){msg_msg;return*this;}private:intcolor_0;inthigh_160;std::string msg_;};intmain(){Demo d;dhello world!;return0;}模板中的CRTP实现这个在前面有专门的论述可参看相关“CRTP”的文章下面看例子templatetypename ConcretePrinterclass Printer{public:Printer(std::ostreampstream):stream_(pstream){}templatetypename TConcretePrinterprint(Tt){stream_t;returnstatic_castConcretePrinter(*this);}templatetypename TConcretePrinterprintln(Tt){stream_tstd::endl;returnstatic_castConcretePrinter(*this);}private:std::ostreamstream_;};enumColor{red,blue,green};class CoutPrinter:public PrinterCoutPrinter{public:CoutPrinter():Printer(std::cout){}CoutPrinterSetConsoleColor(Color c){return*this;}};voidTestChain(){CoutPrinter().print(Hello ).SetConsoleColor(Color::red).println(Printer!);}intmain(){TestChain();return0;}CRTP对于大多数的开发者可能觉得有点陌生不想深入学习模板技术的可以只知道有这么一回事即可不必深究。四、应用场景链式调用的应用场景其实也不算少主要有设计模式中的应用比如常见的建造者模式、流畅接口模式等。异步调用在异步调用中可以使用链式调用来处理回调让代码更简洁和方便发布-订阅机制通过事件驱动消息的链式调用发送链式调用优点明显但也有不少的缺点典型的就是链式调用过程中出现异常的处理比较复杂另外一个就是调试过程中复杂的来回跳转增加了调试中的困难。这些大家要根据情况自行评估应用。五、例程在上面学习的基础上看一个比较典型的观察者模式中对事件通知的处理#includeiostream#includefunctional#includevector#includestring#includememory#includealgorithmclass Observer{public:virtual~Observer()default;virtualvoidonEvent(conststd::stringevent,conststd::stringtask)0;};class TaskObserver:public Observer{private:std::string runnerName_;public:TaskObserver(conststd::stringname):runnerName_(name){}voidonEvent(conststd::stringevent,conststd::stringtask)override{std::coutrunnerName_Event: event, task: taskstd::endl;}};class EventControl{private:std::vectorstd::shared_ptrObserverobservers_;public:EventControlinsertObserver(std::shared_ptrObserverob){observers_.push_back(ob);return*this;}EventControldelObserver(std::shared_ptrObserverob){autoitstd::remove(observers_.begin(),observers_.end(),ob);observers_.erase(it,observers_.end());return*this;}EventControlnotify(conststd::stringevent,conststd::stringtask){for(constautoob:observers_){ob-onEvent(event,task);}return*this;}EventControlclear(){observers_.clear();return*this;}};intmain(){EventControl control;autoworkderAstd::make_sharedTaskObserver(workderA);autoworkderBstd::make_sharedTaskObserver(workderB);control.insertObserver(workderA).insertObserver(workderB).notify(task1,start eating...).notify(task2,start eating the soup...).delObserver(workderA).notify(finish,all finished!).clear();return0;}六、总结链式调用作为C中一种比较优雅的设计方式对于提高项目整体设计和开发的简洁性有着很重要的帮助同时其良好的维护性和可扩展性也为后续的开发提供了方便的接口实现。但其本身所固有的一些问题也是比较突出的这就需要设计和开发者根据自己的实际需求进行权衡应用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询