Sauce-0.10.1
A C++ Dependency Injection Framework
key.h
1#ifndef SAUCE_INTERNAL_KEY_H_
2#define SAUCE_INTERNAL_KEY_H_
3
4#include <sauce/memory.h>
5#include <sauce/named.h>
6#include <sauce/internal/type_id.h>
7
8namespace sauce {
9namespace internal {
10
14template<typename Iface_>
15class Key {
16public:
17 typedef Iface_ Iface;
18 typedef sauce::shared_ptr<Iface_> Ptr;
19 typedef Unnamed Name;
20
28};
29
33template<typename Iface_>
34class Key<Iface_ &> {
35public:
36 typedef typename Key<Iface_>::Iface Iface;
37 typedef typename Key<Iface_>::Ptr Ptr;
38 typedef typename Key<Iface_>::Name Name;
39 typedef typename Key<Iface_>::Normalized Normalized;
40};
41
45template<typename Iface_>
46class Key<sauce::shared_ptr<Iface_> > {
47public:
48 typedef typename Key<Iface_>::Iface Iface;
49 typedef typename Key<Iface_>::Ptr Ptr;
50 typedef typename Key<Iface_>::Name Name;
51 typedef typename Key<Iface_>::Normalized Normalized;
52};
53
57template<typename Iface_, typename Name_>
58class Key<Named<Iface_, Name_> > {
59public:
60 typedef Iface_ Iface;
61 typedef sauce::shared_ptr<Iface_> Ptr;
62 typedef Name_ Name;
64};
65
66}
67
68namespace i = ::sauce::internal;
69
70}
71
72#endif // SAUCE_INTERNAL_KEY_H_
Wrap dependency requests with Named to choose one of several (statically) named alternatives.
Definition: named.h:12
The name of all statically unnamed dependencies.
Definition: named.h:17
A complete specification of a dependency request.
Definition: key.h:15
Named< Iface_, Unnamed > Normalized
Note Normalized is not Iface, but Named<Iface, Unnamed>.
Definition: key.h:27