Listing 3
// SharedLibrary.h #include <string> class SharedLibraryException { public: SharedLibraryException(const char* error) : m_error(error) { } const char* getError() const {return m_error.c_str();} private: std::string m_error; }; class SharedLibrary { public: static SharedLibrary* openSharedLibrary(const char* name) throw (SharedLibraryException); virtual ~SharedLibrary() {} virtual void* findSymbol(const char* name) = 0; // ... }; template<class T> T findSymbol(SharedLibrary& sl, const char* name) { return (T)sl.findSymbol(name); }