#ifndef _FF_FACTORY_H_ #define _FF_FACTORY_H_ #include #include #include #include class FeatureFunction; class FFRegistry; class FFFactoryBase; extern boost::shared_ptr global_ff_registry; class FFRegistry { friend int main(int argc, char** argv); friend class FFFactoryBase; public: boost::shared_ptr Create(const std::string& ffname, const std::string& param) const; void DisplayList() const; void Register(const std::string& ffname, FFFactoryBase* factory); private: FFRegistry() {} std::map > reg_; }; struct FFFactoryBase { virtual ~FFFactoryBase(); virtual boost::shared_ptr Create(const std::string& param) const = 0; }; template class FFFactory : public FFFactoryBase { boost::shared_ptr Create(const std::string& param) const { return boost::shared_ptr(new FF(param)); } }; #endif