$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Anthony Liguori (anthony_at_[hidden])
Date: 2002-11-21 21:16:46
Christophe Meessen wrote:
> What I need is something like the factory method design pattern. It is 
> a method that will construct different types of class instances 
> according to some key information. It could be the class name string, 
> an integer or anything else. It is trivial to implement using 
> Anthony's virtual constructors.
I'm actually looking to produce similiar functionality for my metaclass 
library (returns ctors and methods based on a function type and key 
information).  The thing is, with the virtual ctor library, implementing 
a factory merely requires:
// Assuming you want a factory for class Base that takes two int arguments
typedef std::map<std::string, boost::function<Base *(int, int)> > 
BaseFactory;
BaseFactory factory;
...
// Register subclasses
factory["Subclass1"] = boost::constructor<Subclass1 *(int, int)>();
factory["Subclass2"] = boost::constructor<Subclass2 *(int, int)>();
...
// Make use of factory
std::shared_ptr<Base> base = factory["Subclass1"](10, 15);
>
> Anyway, if Anthony allows me I will now use his library as the basic 
> building block of my object factory
The boost license is Open Source so you don't need my permission :)  Out 
of curiousity though, do you think that a factory class is still useful? 
 Perhaps we can take this discussion off the list and figure out what 
the requirements of a factory class would be that virtual constructors 
wouldn't provide.
Regards,
Anthony Liguori