#pragma once #include #include #include #include #include class MetaImpl : public Meta { // 名前空間 NamespaceScopesCollection namespaceScopesCollection; // クラス ClassesImpl classesImpl; Classes *pNowClassesForDebugger; // blittable型 BlittableTypes blittableTypes; // TypeDef TypeDefCollection typeDefs; public: MetaImpl() : Meta( new ProcPointersImpl() ) , classesImpl() , pNowClassesForDebugger( &classesImpl ) { } const NamespaceScopesCollection &GetNamespaces() const { return namespaceScopesCollection; } NamespaceScopesCollection &GetNamespaces() { return namespaceScopesCollection; } virtual Classes &GetClasses() { return *pNowClassesForDebugger; } virtual void SetClasses( Classes *pClasses ) { this->pNowClassesForDebugger = pClasses; } BlittableTypes &GetBlittableTypes() { return blittableTypes; } TypeDefCollection &GetTypeDefs() { return typeDefs; } virtual bool AutoWrite( const std::string &filePath ) { std::ofstream ofs( filePath.c_str() ); bool isSuccessful = false; try{ boost::archive::xml_oarchive oa(ofs); // ファイルから読込 oa << boost::serialization::make_nvp( RootTagName(), *this ); isSuccessful = true; } catch(...){ // 失敗 } // 入力を閉じる ofs.close(); return isSuccessful; } // XMLシリアライズ用 private: virtual const char *RootTagName() const { return "metaImpl"; } friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Meta ); ar & BOOST_SERIALIZATION_NVP( classesImpl ); } }; BOOST_IS_ABSTRACT( Meta );