50#ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_OBJECT_FACTORY_H
51#define LASS_GUARDIAN_OF_INCLUSION_UTIL_OBJECT_FACTORY_H
64 typename PointerType = ObjectType*,
65 typename MakerType = PointerType(*)()
71 typedef ObjectType TObject;
73 typedef PointerType TPointer;
74 typedef MakerType TMaker;
76 void subscribe(
typename CallTraits<TKey>::TParam key,
typename CallTraits<TMaker>::TParam maker)
81 TPointer make(
typename CallTraits<TKey>::TParam key)
const
83 const typename TMakers::const_iterator i = makers_.find(key);
84 if (i == makers_.end())
86 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
91 template <
typename P1>
92 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1)
const
94 const typename TMakers::const_iterator i = makers_.find(key);
95 if (i == makers_.end())
97 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
99 return (i->second)(p1);
102 template <
typename P1,
typename P2>
103 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2)
const
105 const typename TMakers::const_iterator i = makers_.find(key);
106 if (i == makers_.end())
108 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
110 return (i->second)(p1, p2);
113 template <
typename P1,
typename P2,
typename P3>
114 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3)
const
116 const typename TMakers::const_iterator i = makers_.find(key);
117 if (i == makers_.end())
119 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
121 return (i->second)(p1, p2, p3);
124 template <
typename P1,
typename P2,
typename P3,
typename P4>
125 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4)
const
127 const typename TMakers::const_iterator i = makers_.find(key);
128 if (i == makers_.end())
130 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
132 return (i->second)(p1, p2, p3, p4);
135 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5>
136 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5)
const
138 const typename TMakers::const_iterator i = makers_.find(key);
139 if (i == makers_.end())
141 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
143 return (i->second)(p1, p2, p3, p4, p5);
146 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6>
147 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6)
const
149 const typename TMakers::const_iterator i = makers_.find(key);
150 if (i == makers_.end())
152 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
154 return (i->second)(p1, p2, p3, p4, p5, p6);
157 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7>
158 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7)
const
160 const typename TMakers::const_iterator i = makers_.find(key);
161 if (i == makers_.end())
163 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
165 return (i->second)(p1, p2, p3, p4, p5, p6, p7);
168 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7,
typename P8>
169 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8)
const
171 const typename TMakers::const_iterator i = makers_.find(key);
172 if (i == makers_.end())
174 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
176 return (i->second)(p1, p2, p3, p4, p5, p6, p7, p8);
179 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7,
typename P8,
typename P9>
180 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8, P9& p9)
const
182 const typename TMakers::const_iterator i = makers_.find(key);
183 if (i == makers_.end())
185 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
187 return (i->second)(p1, p2, p3, p4, p5, p6, p7, p8, p9);
190 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7,
typename P8,
typename P9,
typename P10>
191 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8, P9& p9, P10& p10)
const
193 const typename TMakers::const_iterator i = makers_.find(key);
194 if (i == makers_.end())
196 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
198 return (i->second)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
201 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7,
typename P8,
typename P9,
typename P10,
typename P11>
202 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8, P9& p9, P10& p10, P11& p11)
const
204 const typename TMakers::const_iterator i = makers_.find(key);
205 if (i == makers_.end())
207 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
209 return (i->second)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
212 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7,
typename P8,
typename P9,
typename P10,
typename P11,
typename P12>
213 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8, P9& p9, P10& p10, P11& p11, P12& p12)
const
215 const typename TMakers::const_iterator i = makers_.find(key);
216 if (i == makers_.end())
218 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
220 return (i->second)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
223 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7,
typename P8,
typename P9,
typename P10,
typename P11,
typename P12,
typename P13>
224 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8, P9& p9, P10& p10, P11& p11, P12& p12, P13& p13)
const
226 const typename TMakers::const_iterator i = makers_.find(key);
227 if (i == makers_.end())
229 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
231 return (i->second)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
234 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7,
typename P8,
typename P9,
typename P10,
typename P11,
typename P12,
typename P13,
typename P14>
235 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8, P9& p9, P10& p10, P11& p11, P12& p12, P13& p13, P14& p14)
const
237 const typename TMakers::const_iterator i = makers_.find(key);
238 if (i == makers_.end())
240 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
242 return (i->second)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
245 template <
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7,
typename P8,
typename P9,
typename P10,
typename P11,
typename P12,
typename P13,
typename P14,
typename P15>
246 TPointer make(
typename CallTraits<TKey>::TParam key, P1& p1, P2& p2, P3& p3, P4& p4, P5& p5, P6& p6, P7& p7, P8& p8, P9& p9, P10& p10, P11& p11, P12& p12, P13& p13, P14& p14, P15& p15)
const
248 const typename TMakers::const_iterator i = makers_.find(key);
249 if (i == makers_.end())
251 LASS_THROW_EX(KeyError,
"no product maker registered by key '" << key <<
"'");
253 return (i->second)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
259 typedef std::map<TKey, TMaker> TMakers;
general utility, debug facilities, ...
Library for Assembled Shared Sources.