]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/objectloader.h
Move all exception classes to except.h, for real this time
[libs/datafile.git] / source / objectloader.h
index 5928714215cd056297cab8fd79e1f9647fe648e2..e383109f791937739c7e80e5e3d10486bc1641ff 100644 (file)
@@ -1,18 +1,12 @@
 #ifndef MSP_DATAFILE_OBJECTLOADER_H_
 #define MSP_DATAFILE_OBJECTLOADER_H_
 
-#include <typeinfo>
+#include "except.h"
 #include "loader.h"
 
 namespace Msp {
 namespace DataFile {
 
-class no_collection: public std::runtime_error
-{
-public:
-       no_collection(const std::type_info &);
-};
-
 class Collection;
 
 /**
@@ -20,7 +14,7 @@ Provides the basic functionality of an object loader.  Deriving from this
 allows loading values directly into member variables of the objects.
 */
 template<typename O>
-class ObjectLoader: public Loader
+class ObjectLoader: virtual public Loader
 {
 public:
        typedef O Object;
@@ -40,7 +34,7 @@ Convenience class for loading derived objects.  Inherits from the base class
 loader and shadows its members with ones for the derived type.
 */
 template<typename O, typename B>
-class DerivedObjectLoader: public B::Loader
+class DerivedObjectLoader: public B
 {
 public:
        typedef O Object;
@@ -48,7 +42,10 @@ public:
 protected:
        O &obj;
 
-       DerivedObjectLoader(O &o): B::Loader(o), obj(o) { }
+       DerivedObjectLoader(O &o): B(o), obj(o) { }
+
+       template<typename T>
+       DerivedObjectLoader(O &o, T &a): B(o, a), obj(o) { }
 
 public:
        O &get_object() const { return obj; }