龙空技术网

C++每日一练(20210623):奇异递归模板模式之链式调用实现

骇客遇见AI 300

前言:

而今大家对“js链式调用如何实现”大约比较重视,姐妹们都需要分析一些“js链式调用如何实现”的相关文章。那么小编同时在网络上搜集了一些对于“js链式调用如何实现””的相关文章,希望我们能喜欢,姐妹们快快来学习一下吧!

CRTP(Curiously recurring template pattern),奇异递归模板模式是C++模板编程时的一种惯用法:把派生类作为基类的模板参数。

链式调用是种语法糖,简化对一个对象的反复操作,并且阅读起来也很美观。

obj.seta().setb().setc();

#include <iostream>enum Color {RED, GREEN, BLUE};// Base classtemplate <typename CustomPrinter>class Printer {public:    explicit Printer(std::ostream& pstream) : m_stream(pstream) {}    template <typename T>    CustomPrinter& print(T&& t)    {        m_stream << t;        return static_cast<CustomPrinter&>(*this);    }    template <typename T>    CustomPrinter& println(T&& t)    {        m_stream << t << std::endl;        return static_cast<CustomPrinter&>(*this);    }private:    std::ostream& m_stream;}; // Derived classclass ColorPrinter : public Printer<ColorPrinter> {public:    ColorPrinter() : Printer(std::cout) {}    ColorPrinter& set_console_color(Color c) {         switch(c){            case BLUE:                    std::cout << "\033[0;1;34m";                    break;            case RED:                    std::cout << "\033[0;1;31m";                    break;            case GREEN:                    std::cout << "\033[0;1;32m";                    break;        }                return *this;    }};int main() {    // usage    ColorPrinter().print("Hello ").set_console_color(RED).println("World!");}

在线编译测试

标签: #js链式调用如何实现