[boost-serialisierung] archive: "load" oder "save"



  • nächstes problem:

    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
    
    class A{
    public:
        template<class Archive>
        void serialize(Archive & ar, const unsigned int version)
        {
            if(Archive::is_loading()) {...}
            else  {...}
        }
    };
    

    boost ver. 1.33.1
    windows(cl): fehlerfrei
    linux(gcc 3.4): geschätze 10 seiten lange fehlermeldung.
    hier die wesentlichen punkte, mit denen ich nichts anfangen kann:
    "... error: dependent-name Archive::is_loading' is parsed as a non-type, but instantiation yields a type..." und "... note: saytypename Archive::is_loading' if a type is meant..."

    Hilfreiche Zusatz-Infos:
    archive-interface-definfition von boost (hier für iarchive):

    typedef mpl::bool_<true> is_loading;
    typedef mpl::bool_<false> is_saving;
    

    quelle:

    http://www.boost.org/libs/serialization/doc/archives.html#archive_models
    

    mit

    template< bool C_ > struct bool_
    {
        BOOST_STATIC_CONSTANT(bool, value = C_);
        typedef integral_c_tag tag;
        typedef bool_ type;
        typedef bool value_type;
        operator bool() const { return this->value; }
    };
    

    was mache ich falsch?



  • Vermutlich gibt es da ein Problem, den op() aufzulösen (ich bin nichtmal sicher, wer da Recht hat). Versuch's mal mit if(Archive::is_loading::value)... (oder im größten Notfall:

    typename Arcive::is_loading load;
    if(load())...
    


  • jupp, daran lag es...
    wieso boost das ganze derartig wrapped ist mir eh ein rätsel.
    andere archive die ich verwende (z.B. sie serialisierung von jarl lindrud) haben stinknormale statische methoden isRead() u. ä.

    jedenfalls klappt das ganze jetzt mit

    Archive::is_loading::value
    

    1000 dank. 1A Forum!


Anmelden zum Antworten