
John Torjo wrote:
* What is your evaluation of the design?
"Factory" is a succinct shorthand for "constructor/new forwarding library", but I must admit that the name Factory implies more to me -- something more like the GoF Factory pattern. I used the library to build a toy version of a Factory mechanism from a previous project. With that, the client passes a std::string name and gets a pointer to the corresponding concrete implementation of an abstract base class. To be sure, the messiest part of my previous implementation was passing constructor arguments. It was nice that boost::factory eliminated the need to handle that explicitly.
* What is your evaluation of the implementation?
I didn't look at the implementation.
* What is your evaluation of the documentation?
It could be more tangible. As I read it, my question was: how can I use this library to build the functionality described above? To me, the most useful part of the documentation was the hint about boost::function and the examples. Several more examples would be great. I'd particularly like to see the boost::function trick illustrated in more depth, e.g.: here's a std::map<std::string, boost::function<Base*()> > which we can populate with boost::factory<SubclassOne*>(), boost::factory<SubclassTwo*>(), etc. Since (to me) the real power of boost::factory is that it forwards constructor arguments, extending that example to show a non-empty canonical constructor argument signature (e.g. a mapped_type of boost::function<Base*(int)>) would be good too. But lack of that extended documentation shouldn't be a showstopper.
* What is your evaluation of the potential usefulness of the library?
It's a very useful building block.
* Did you try to use the library? With what compiler? Did you have any problems?
I tried boost::factory with Apple's g++ 4.0.1. I had no problems. I didn't try boost::value_factory.
* Do you think the library should be accepted as a Boost library?
Yes. My one concern is that perhaps the name boost::factory should be reserved for a later, more full-featured library, built on this one -- though I haven't yet thought of a more descriptive name for this one that's both clear and concise.