blob: de1ac91fc71333ad0a1e2e162672b3cc6e480127 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#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:
// Like "StdoutWriter() = default;" but also marks this constructor as the
// one to use for injection.
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:
// Like "GreeterImpl(Writer* writer) {...}" but also marks this constructor
// as the one to use for injection.
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;
}
|