25 #ifndef QUESO_FACTORY_H 
   26 #define QUESO_FACTORY_H 
   28 #include <queso/asserts.h> 
   29 #include <queso/SharedPtr.h> 
   49   Factory(
const std::string & name);
 
   60   static typename SharedPtr<Base>::Type 
build(
const std::string & name);
 
   66   virtual typename SharedPtr<Base>::Type 
create() = 0;
 
   72   static std::map<std::string, Factory<Base> *> & 
factory_map();
 
   78 template <
class Derived, 
class Base>
 
   96   virtual typename SharedPtr<Base>::Type 
create();
 
  101 template <
class Base>
 
  109   factory_map()[name] = 
this;
 
  112 template <
class Base>
 
  117   if (!factory_map().count(name))
 
  119       std::cerr << 
"Tried to build an unknown type: " << name << std::endl;
 
  121       std::cerr << 
"valid options are:" << std::endl;
 
  123       for (
typename std::map<std::string,
Factory<Base> *>::const_iterator
 
  124              it = factory_map().begin(); 
it != factory_map().end(); ++
it)
 
  125         std::cerr << 
"  " << 
it->first << std::endl;
 
  130       return typename SharedPtr<Base>::Type();
 
  134   return typename SharedPtr<Base>::Type(f->
create());
 
  146 template <
class Derived, 
class Base>
 
  150   return typename SharedPtr<Base>::Type(
new Derived);
 
  155 #endif // QUESO_FACTORY_H 
virtual SharedPtr< Base >::Type create()=0
 
FactoryImp(const std::string &name)
 
static std::map< std::string, Factory< Base > * > & factory_map()
 
virtual SharedPtr< Base >::Type create()
 
that you receive source code or can get it if you want it
 
#define queso_assert(asserted)
 
Factory(const std::string &name)
 
static SharedPtr< Base >::Type build(const std::string &name)
 
#define queso_error_msg(msg)