Next: Alternative creation mechanisms, Previous: Implementing new library classes, Up: Implementing new library classes
The implementation of a new type of library that can be auto-detected needs to
register a function with the signature library::init_function with
library::addtype.  This gets used by the library class when it attempts
to open a file.  It is often convenient to provide
the library user with a registerlib function that handles this
registration.  For example, for a type of library file that always starts
with the line “My Library File”, the following might be used.
     class mylibrary : public library_base {
     public:
       // Allow the user to initialise the library
       static void registerlib(void) {
         library::addtype(&canread);
       }
     
     private:
       static library_base *canread(const string& name) {
         ifstream ifs(name); string first_line;  getline(ifs, first_line);
         if (first_line == "My Library File") return new mylibrary(name);
         return NULL;
       }
     
       mylibrary(const string &name);
     };
   In addition, the implementation must override the library_base::good
and library_base::begin virtual functions.  This is discussed elsewhere.