StupidBeauty
Read times:2349Posted at: - no title specified

Fruit教程翻译:1. 入门,1. Getting started

让我们来看一个简单的示例:使用Fruit 来编写的一个世界妳好(Hello world)。对于这种场景,使用Fruit来实现可能有点小题大做了,但是,通过这个示例,我们能够观摩Fruit 的基本功能和语法。

#include <fruit/fruit.h>
#include <iostream>


using fruit::Component;
using fruit::Injector;

class Writer {
public:
  virtual void write(std::string s) = 0;
};

class StdoutWriter : public Writer {
public:
  // 类似 "StdoutWriter() = default;" ,但是,额外地将这个构造函数标记为 要用于注入。
  INJECT(StdoutWriter()) = default;

  virtual void write(std::string s) override {
    std::cout << s;
  }
};

class Greeter {
public:
  virtual void greet() = 0;
};

class GreeterImpl : public Greeter {
private:
  Writer* writer;

public:
  // 类似 "GreeterImpl(Writer* writer) : ... {...}" ,但是,额外地将这个构造函数标记为要用于注入。
  INJECT(GreeterImpl(Writer* writer))
    : writer(writer) {
  }

  virtual void greet() override {
    writer->write("Hello world!\n");
  }
};

Component<Greeter> getGreeterComponent() {
  return fruit::createComponent()
    .bind<Writer, StdoutWriter>()
    .bind<Greeter, GreeterImpl>();
}

int main() {
  Injector<Greeter> injector(getGreeterComponent());
  Greeter* greeter = injector.get<Greeter*>();

  greeter->greet();

  return 0;
}

以上程序代码的结构,可使用下面的组件图来表示。

StdoutWriter类,不依赖任何东西,并且提供了一个StdoutWriter实例。StdoutWriter 与 Writer 之间的绑定,需要有一个StdoutWriter 实例,并且提供了一个Writer 实例。GreeterImpl类需要一个Writer实例,并且提供了一个GreeterImpl实例。GreeterImpl 与 Greeter 之间的绑定,需要一个GreeterImpl 实例,并且提供了一个Greeter 实例。最后,GreeterComponent不需要任何东西,并且提供了一个Greeter实例

使用Fruit 的时候,一般都会将复合组件放在一个 get * Component() 函数中定义,该函数首先调用 createComponent() 来创建一个空的组件,然后使用一系列的操作函数来添加子组件。此处,我们只看到了 bind<I, C>() 操作函数,实际上还有狠多其它的操作函数。然后,这一系列操作函数调用的结果,被通过一个隐式转换操作转换成预期的组件类型(在这个示例中,就是 Component<Greeter> );在这个转换过程中,Fruit会针对绑定的那些类查找其中使用 INJECT() 包装的构造函数,这就是以上的两个组件被加入的方式。注意,组件 并不需要将所有被绑定的接口都暴露出来,例如,在这个示例中,我们并没有暴露Writer接口,同时,我们也并未暴露任何的实现类。对于 getGreeterComponent() ,也可以写成另外一种返回一个 Component<Greeter, Writer, GreeterImpl, StdoutWriter> 的形式。

通常都狠有必要隐藏掉实体(concrete)类的信息,所以,当某个类被绑定到某个接口时,实现类通常并未提供。为了简化表示,在此教程的后续部分,我们会将实现类与所有相关的绑定表示为单个组件。因此,上面的图可以简化成:

教程 的下一部分 中,我们会观摩一个使用Fruit 实现的简单系统。

光盘加密

一点冲上天

黄河两岸湾

八子大张口

言字往里走

你一扭,我一扭

你一长,我一长

中间夹个马大王

心字做底,月字做旁

契个钉钉儿挂衣裳

坐个车车儿走咸阳

水母

叶海龙

Your opinions

Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4