X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Floader.h;h=02caaaf9ee75dce3ca573cf929611124e551053f;hb=c308213edfde6e137fde273678c4af2520566826;hp=207ecff8dff8d7f068aa033994ef2a5e608ba56a;hpb=6a033cf0f5164915168f9cb778e801ed86450e1c;p=libs%2Fdatafile.git diff --git a/source/loader.h b/source/loader.h index 207ecff..02caaaf 100644 --- a/source/loader.h +++ b/source/loader.h @@ -44,7 +44,7 @@ private: const Statement *cur_st; bool sub_loaded; bool direct; - std::list aux_loaders; + std::vector aux_loaders; protected: bool check_sub_loads; @@ -97,6 +97,12 @@ protected: void add(const std::string &k, void (L::*func)(A0)) { add(k, new LoaderFunc1(func)); } +#if __cplusplus>=201103L + template + void add(const std::string &k, void (L::*func)(Args...)) + { add(k, new LoaderFuncN(func)); } + +#else template void add(const std::string &k, void (L::*func)(A0, A1)) { add(k, new LoaderFunc2(func)); } @@ -112,6 +118,7 @@ protected: template void add(const std::string &k, void (L::*func)(A0, A1, A2, A3, A4)) { add(k, new LoaderFunc5(func)); } +#endif /** Adds a keyword that is loaded into a member of the loaded object. */ template @@ -174,6 +181,8 @@ template void load(T &obj, typename T::Loader::Collection &coll, const std::string &fn, Args &... args) { RefPtr in = coll.open_raw(fn); + if(!in) + throw IO::file_not_found(fn); Parser parser(*in, fn); typename T::Loader loader(obj, coll, args...); @@ -188,6 +197,8 @@ template typename EnableIf::value, void>::No load(T &obj, C &coll, const std::string &fn, Args &... args) { RefPtr in = coll.open_raw(fn); + if(!in) + throw IO::file_not_found(fn); Parser parser(*in, fn); typename T::Loader loader(obj, args...);