Library of Assembled Shared Sources
clone_factory.h
Go to the documentation of this file.
1/*
2 * *** ATTENTION! DO NOT MODIFY THIS FILE DIRECTLY! ***
3 *
4 * It has automatically been generated from clone_factory.tmpl.h
5 * by param_expander.py on Mon Oct 6 22:51:37 2025.
6 */
7
8/** @file
9 * @author Bram de Greve (bram@cocamware.com)
10 * @author Tom De Muer (tom@cocamware.com)
11 *
12 * *** BEGIN LICENSE INFORMATION ***
13 *
14 * The contents of this file are subject to the Common Public Attribution License
15 * Version 1.0 (the "License"); you may not use this file except in compliance with
16 * the License. You may obtain a copy of the License at
17 * http://lass.sourceforge.net/cpal-license. The License is based on the
18 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
19 * use of software over a computer network and provide for limited attribution for
20 * the Original Developer. In addition, Exhibit A has been modified to be consistent
21 * with Exhibit B.
22 *
23 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
24 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
25 * language governing rights and limitations under the License.
26 *
27 * The Original Code is LASS - Library of Assembled Shared Sources.
28 *
29 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
30 * The Original Developer is the Initial Developer.
31 *
32 * All portions of the code written by the Initial Developer are:
33 * Copyright (C) 2004-2011 the Initial Developer.
34 * All Rights Reserved.
35 *
36 * Contributor(s):
37 *
38 * Alternatively, the contents of this file may be used under the terms of the
39 * GNU General Public License Version 2 or later (the GPL), in which case the
40 * provisions of GPL are applicable instead of those above. If you wish to allow use
41 * of your version of this file only under the terms of the GPL and not to allow
42 * others to use your version of this file under the CPAL, indicate your decision by
43 * deleting the provisions above and replace them with the notice and other
44 * provisions required by the GPL License. If you do not delete the provisions above,
45 * a recipient may use your version of this file under either the CPAL or the GPL.
46 *
47 * *** END LICENSE INFORMATION ***
48 */
49
50
51
52/** @class lass::util::CloneFactory
53 * @brief object creation by cloning prototypes
54 * @author Bram de Greve [Bramz]
55 *
56 * A clone factory is much like an object factory (lass::util::ObjectFactory), except that it will
57 * clone existings object rather than creating new ones from the ground up using maker functions.
58 *
59 * A clone factory creates objects of the same hierarchy, i.e. objects that have a common base
60 * class. The base class is an @e abstract product and the derived classes are @e concrete
61 * products. The factory let you decide what concrete product to create at @e runtime by
62 * using a specific @e identifier. These identifiers can be integers or strings or any
63 * type you can use in a std::map.
64 *
65 * Before you can create any products, you must @e subscribe @e prototypes and @e cloner methods
66 * to the factory. A @e prototype is an object instance that will be cloned by the @e cloner
67 * function. Together, a pair of a @e prototype and a @e cloner function provides the
68 * functionality of one @e maker function in the ObjectFactory.
69 *
70 * Again, all this @a cloners must have the same signature and should return a pointer to the
71 * abstract product. Their first argument will be a reference to the prototype being cloned.
72 * The following arguments will be filled by the @a iP1, @a iP2, @a iP3, ... that are provided to
73 * the make() method of the clone factory.
74 *
75 * @code
76 * class Base
77 * {
78 * public:
79 * Base(const std::string& iName): name_(iName) {}
80 * virtual std::string who() const { return std::string("Base ") + name_; }
81 * virtual Base* clone() const { return new Base(*this); }
82 * protected:
83 * std::string name_;
84 * };
85 *
86 * class Foo: public Base
87 * {
88 * public:
89 * Foo(const std::string& iName): Base(iName) {}
90 * virtual std::string who() const { return std::string("Foo ") + name_; }
91 * virtual Base* clone() const { return new Foo(*this); }
92 * };
93 *
94 * class Bar: public Base
95 * {
96 * public:
97 * Bar(const std::string& iName): Base(iName) {}
98 * virtual std::string who() const { return std::string("Bar ") + name_; }
99 * virtual Base* clone() const { return new Bar(*this); }
100 * };
101 *
102 * Base* clone(const Base& iPrototype) { return iPrototype.clone(); }
103 *
104 * typedef util::CloneFactory<Base, std::string> TFactory;
105 * typedef std::auto_ptr<Base> TBasePtr;
106 *
107 * TFactory factory(clone);
108 * factory.subscribe("Joe", TBasePtr(new Base("Joe")));
109 * factory.subscribe("Moe", TBasePtr(new Foo("Moe")));
110 * factory.subscribe("Doe", TBasePtr(new Bar("Doe")));
111 *
112 * TBasePtr a(factory.make("Joe"));
113 * LASS_COUT << a->who() << "\n"; // Base Joe
114 * TBasePtr b(factory.make("Moe"));
115 * LASS_COUT << b->who() << "\n"; // Foo Moe
116 * TBasePtr c(factory.make("Doe"));
117 * LASS_COUT << c->who() << "\n"; // Bar Doe
118 * @endcode
119 */
120
121#ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_CLONE_FACTORY_H
122#define LASS_GUARDIAN_OF_INCLUSION_UTIL_CLONE_FACTORY_H
123
124#include "util_common.h"
125#include "shared_ptr.h"
126
127namespace lass
128{
129namespace util
130{
131
132template
133<
134 class AbstractProduct,
135 class IdentifierType,
136 class ProductCloner = AbstractProduct*(*)(const AbstractProduct&)
137>
139{
140public:
141
142 typedef AbstractProduct TAbstractProduct;
143 typedef IdentifierType TIdentifier;
144 typedef ProductCloner TProductCloner;
145
146 /** create a clone factory by specifying its cloner function @a iCloner.
147 */
148 CloneFactory(typename CallTraits<ProductCloner>::TParam iCloner):
149 cloner_(iCloner)
150 {
151 }
152
153 /** register a concrete product to the CloneFactory by a @a iIdentifier that
154 * will identify the product, and an @a iPrototype that will be cloned.
155 */
157 typename CallTraits<IdentifierType>::TParam iIdentifier,
158 std::unique_ptr<AbstractProduct> iPrototype)
159 {
160 return prototypes_.insert(typename TPrototypes::value_type(
161 iIdentifier, std::move(iPrototype))).second;
162 }
163
164 /** unregister a concrete product by its @a iIdentifier
165 */
166 bool unsubscribe(typename CallTraits<IdentifierType>::TParam iIdentifier)
167 {
168 return prototypes_.erase(iIdentifier) == 1;
169 }
170
171 /** Create a new concrete product by cloning the prototype
172 * only to be used if maker don't want any parameters.
173 */
174 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier) const
175 {
176 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
177 if (i == prototypes_.end())
178 {
179 LASS_THROW("Unknown Product identifier '" << iIdentifier
180 << "' passed to CloneFactory.");
181 }
182 return cloner_(*i->second);
183 }
184
185 /** create a new concrete product by cloning the prototype with 1 additional parameter(s).
186 * only to be used if it can be mapped on @a iCloner function.
187 */
188 template <typename P1>
189 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
190 P1& iP1) const
191 {
192 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
193 if (i == prototypes_.end())
194 {
195 LASS_THROW("Unknown Product identifier '" << iIdentifier
196 << "' passed to CloneFactory.");
197 }
198 return cloner_(*i->second, iP1);
199 }
200
201 /** create a new concrete product by cloning the prototype with 2 additional parameter(s).
202 * only to be used if it can be mapped on @a iCloner function.
203 */
204 template <typename P1, typename P2>
205 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
206 P1& iP1, P2& iP2) const
207 {
208 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
209 if (i == prototypes_.end())
210 {
211 LASS_THROW("Unknown Product identifier '" << iIdentifier
212 << "' passed to CloneFactory.");
213 }
214 return cloner_(*i->second, iP1, iP2);
215 }
216
217 /** create a new concrete product by cloning the prototype with 3 additional parameter(s).
218 * only to be used if it can be mapped on @a iCloner function.
219 */
220 template <typename P1, typename P2, typename P3>
221 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
222 P1& iP1, P2& iP2, P3& iP3) const
223 {
224 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
225 if (i == prototypes_.end())
226 {
227 LASS_THROW("Unknown Product identifier '" << iIdentifier
228 << "' passed to CloneFactory.");
229 }
230 return cloner_(*i->second, iP1, iP2, iP3);
231 }
232
233 /** create a new concrete product by cloning the prototype with 4 additional parameter(s).
234 * only to be used if it can be mapped on @a iCloner function.
235 */
236 template <typename P1, typename P2, typename P3, typename P4>
237 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
238 P1& iP1, P2& iP2, P3& iP3, P4& iP4) const
239 {
240 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
241 if (i == prototypes_.end())
242 {
243 LASS_THROW("Unknown Product identifier '" << iIdentifier
244 << "' passed to CloneFactory.");
245 }
246 return cloner_(*i->second, iP1, iP2, iP3, iP4);
247 }
248
249 /** create a new concrete product by cloning the prototype with 5 additional parameter(s).
250 * only to be used if it can be mapped on @a iCloner function.
251 */
252 template <typename P1, typename P2, typename P3, typename P4, typename P5>
253 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
254 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5) const
255 {
256 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
257 if (i == prototypes_.end())
258 {
259 LASS_THROW("Unknown Product identifier '" << iIdentifier
260 << "' passed to CloneFactory.");
261 }
262 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5);
263 }
264
265 /** create a new concrete product by cloning the prototype with 6 additional parameter(s).
266 * only to be used if it can be mapped on @a iCloner function.
267 */
268 template <typename P1, typename P2, typename P3, typename P4, typename P5, typename P6>
269 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
270 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6) const
271 {
272 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
273 if (i == prototypes_.end())
274 {
275 LASS_THROW("Unknown Product identifier '" << iIdentifier
276 << "' passed to CloneFactory.");
277 }
278 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6);
279 }
280
281 /** create a new concrete product by cloning the prototype with 7 additional parameter(s).
282 * only to be used if it can be mapped on @a iCloner function.
283 */
284 template <typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7>
285 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
286 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7) const
287 {
288 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
289 if (i == prototypes_.end())
290 {
291 LASS_THROW("Unknown Product identifier '" << iIdentifier
292 << "' passed to CloneFactory.");
293 }
294 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7);
295 }
296
297 /** create a new concrete product by cloning the prototype with 8 additional parameter(s).
298 * only to be used if it can be mapped on @a iCloner function.
299 */
300 template <typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
301 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
302 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7, P8& iP8) const
303 {
304 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
305 if (i == prototypes_.end())
306 {
307 LASS_THROW("Unknown Product identifier '" << iIdentifier
308 << "' passed to CloneFactory.");
309 }
310 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7, iP8);
311 }
312
313 /** create a new concrete product by cloning the prototype with 9 additional parameter(s).
314 * only to be used if it can be mapped on @a iCloner function.
315 */
316 template <typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9>
317 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
318 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7, P8& iP8, P9& iP9) const
319 {
320 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
321 if (i == prototypes_.end())
322 {
323 LASS_THROW("Unknown Product identifier '" << iIdentifier
324 << "' passed to CloneFactory.");
325 }
326 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7, iP8, iP9);
327 }
328
329 /** create a new concrete product by cloning the prototype with 10 additional parameter(s).
330 * only to be used if it can be mapped on @a iCloner function.
331 */
332 template <typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10>
333 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
334 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7, P8& iP8, P9& iP9, P10& iP10) const
335 {
336 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
337 if (i == prototypes_.end())
338 {
339 LASS_THROW("Unknown Product identifier '" << iIdentifier
340 << "' passed to CloneFactory.");
341 }
342 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7, iP8, iP9, iP10);
343 }
344
345 /** create a new concrete product by cloning the prototype with 11 additional parameter(s).
346 * only to be used if it can be mapped on @a iCloner function.
347 */
348 template <typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8, typename P9, typename P10, typename P11>
349 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
350 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7, P8& iP8, P9& iP9, P10& iP10, P11& iP11) const
351 {
352 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
353 if (i == prototypes_.end())
354 {
355 LASS_THROW("Unknown Product identifier '" << iIdentifier
356 << "' passed to CloneFactory.");
357 }
358 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7, iP8, iP9, iP10, iP11);
359 }
360
361 /** create a new concrete product by cloning the prototype with 12 additional parameter(s).
362 * only to be used if it can be mapped on @a iCloner function.
363 */
364 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>
365 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
366 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7, P8& iP8, P9& iP9, P10& iP10, P11& iP11, P12& iP12) const
367 {
368 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
369 if (i == prototypes_.end())
370 {
371 LASS_THROW("Unknown Product identifier '" << iIdentifier
372 << "' passed to CloneFactory.");
373 }
374 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7, iP8, iP9, iP10, iP11, iP12);
375 }
376
377 /** create a new concrete product by cloning the prototype with 13 additional parameter(s).
378 * only to be used if it can be mapped on @a iCloner function.
379 */
380 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>
381 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
382 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7, P8& iP8, P9& iP9, P10& iP10, P11& iP11, P12& iP12, P13& iP13) const
383 {
384 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
385 if (i == prototypes_.end())
386 {
387 LASS_THROW("Unknown Product identifier '" << iIdentifier
388 << "' passed to CloneFactory.");
389 }
390 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7, iP8, iP9, iP10, iP11, iP12, iP13);
391 }
392
393 /** create a new concrete product by cloning the prototype with 14 additional parameter(s).
394 * only to be used if it can be mapped on @a iCloner function.
395 */
396 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>
397 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
398 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7, P8& iP8, P9& iP9, P10& iP10, P11& iP11, P12& iP12, P13& iP13, P14& iP14) const
399 {
400 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
401 if (i == prototypes_.end())
402 {
403 LASS_THROW("Unknown Product identifier '" << iIdentifier
404 << "' passed to CloneFactory.");
405 }
406 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7, iP8, iP9, iP10, iP11, iP12, iP13, iP14);
407 }
408
409 /** create a new concrete product by cloning the prototype with 15 additional parameter(s).
410 * only to be used if it can be mapped on @a iCloner function.
411 */
412 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>
413 AbstractProduct* make(typename CallTraits<IdentifierType>::TParam iIdentifier,
414 P1& iP1, P2& iP2, P3& iP3, P4& iP4, P5& iP5, P6& iP6, P7& iP7, P8& iP8, P9& iP9, P10& iP10, P11& iP11, P12& iP12, P13& iP13, P14& iP14, P15& iP15) const
415 {
416 typename TPrototypes::const_iterator i = prototypes_.find(iIdentifier);
417 if (i == prototypes_.end())
418 {
419 LASS_THROW("Unknown Product identifier '" << iIdentifier
420 << "' passed to CloneFactory.");
421 }
422 return cloner_(*i->second, iP1, iP2, iP3, iP4, iP5, iP6, iP7, iP8, iP9, iP10, iP11, iP12, iP13, iP14, iP15);
423 }
424
425
426private:
427
428 typedef SharedPtr<AbstractProduct> TPrototypePtr;
429 typedef std::map<IdentifierType, TPrototypePtr> TPrototypes;
430
431 TPrototypes prototypes_;
432 TProductCloner cloner_;
433};
434
435
436
437}
438
439}
440
441#endif
442
443// EOF
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7, P8 &iP8, P9 &iP9, P10 &iP10, P11 &iP11, P12 &iP12, P13 &iP13, P14 &iP14, P15 &iP15) const
create a new concrete product by cloning the prototype with 15 additional parameter(s).
bool unsubscribe(typename CallTraits< IdentifierType >::TParam iIdentifier)
unregister a concrete product by its iIdentifier
bool subscribe(typename CallTraits< IdentifierType >::TParam iIdentifier, std::unique_ptr< AbstractProduct > iPrototype)
register a concrete product to the CloneFactory by a iIdentifier that will identify the product,...
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2) const
create a new concrete product by cloning the prototype with 2 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1) const
create a new concrete product by cloning the prototype with 1 additional parameter(s).
CloneFactory(typename CallTraits< ProductCloner >::TParam iCloner)
create a clone factory by specifying its cloner function iCloner.
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4) const
create a new concrete product by cloning the prototype with 4 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7, P8 &iP8, P9 &iP9, P10 &iP10, P11 &iP11, P12 &iP12, P13 &iP13) const
create a new concrete product by cloning the prototype with 13 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5) const
create a new concrete product by cloning the prototype with 5 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7, P8 &iP8, P9 &iP9) const
create a new concrete product by cloning the prototype with 9 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3) const
create a new concrete product by cloning the prototype with 3 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier) const
Create a new concrete product by cloning the prototype only to be used if maker don't want any parame...
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7, P8 &iP8) const
create a new concrete product by cloning the prototype with 8 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7, P8 &iP8, P9 &iP9, P10 &iP10, P11 &iP11) const
create a new concrete product by cloning the prototype with 11 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6) const
create a new concrete product by cloning the prototype with 6 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7, P8 &iP8, P9 &iP9, P10 &iP10) const
create a new concrete product by cloning the prototype with 10 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7, P8 &iP8, P9 &iP9, P10 &iP10, P11 &iP11, P12 &iP12) const
create a new concrete product by cloning the prototype with 12 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7, P8 &iP8, P9 &iP9, P10 &iP10, P11 &iP11, P12 &iP12, P13 &iP13, P14 &iP14) const
create a new concrete product by cloning the prototype with 14 additional parameter(s).
AbstractProduct * make(typename CallTraits< IdentifierType >::TParam iIdentifier, P1 &iP1, P2 &iP2, P3 &iP3, P4 &iP4, P5 &iP5, P6 &iP6, P7 &iP7) const
create a new concrete product by cloning the prototype with 7 additional parameter(s).
general utility, debug facilities, ...
Library for Assembled Shared Sources.
Definition config.h:53