#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;
/**
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;
protected:
O &obj;
- DerivedObjectLoader(O &o): B(o), obj(o) { }
+ template<typename... Args>
+ DerivedObjectLoader(O &o, Args &&... a): B(o, std::forward<Args>(a)...), obj(o) { }
public:
O &get_object() const { return obj; }
typedef C Collection;
protected:
- C *coll;
+ C *coll = nullptr;
CollectionObjectLoader(O &o, C *c): ObjectLoader<O>(o), coll(c) { }