#ifndef MSP_DATAFILE_OBJECTLOADER_H_
#define MSP_DATAFILE_OBJECTLOADER_H_
+#include <typeinfo>
#include "loader.h"
namespace Msp {
namespace DataFile {
+class no_collection: public std::runtime_error
+{
+public:
+ no_collection(const std::type_info &);
+};
+
class Collection;
/**
};
+/**
+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
+{
+public:
+ typedef O Object;
+
+protected:
+ O &obj;
+
+ DerivedObjectLoader(O &o): B(o), obj(o) { }
+
+public:
+ O &get_object() const { return obj; }
+};
+
+
/**
Provides functionality for loading objects with a Collection. Deriving from
this allows loading pointers to objects in the collection automatically.
C &get_collection() const
{
if(!coll)
- throw InvalidState("No collection");
+ throw no_collection(typeid(O));
return *coll;
}
};