#pragma once class CClass; class DynamicMethodsPrototype { // 動的メソッド Methods dynamicMethods; // XMLシリアライズ用 private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP( dynamicMethods ); } public: DynamicMethodsPrototype(){} DynamicMethodsPrototype( const DynamicMethodsPrototype &dynamicMethodsPrototype ) : dynamicMethods( dynamicMethodsPrototype.dynamicMethods ) { } ~DynamicMethodsPrototype(){} const Methods &GetDynamicMethods() const { return dynamicMethods; } Methods &GetDynamicMethods() { return dynamicMethods; } void AddDynamicMethods( CMethod *pMethod ) { dynamicMethods.push_back( pMethod ); } }; class Interface : public DynamicMethodsPrototype { const CClass *pInterfaceClass; mutable int vtblOffset; // 型パラメータ(実パラメータ) Types actualTypeParameters; // XMLシリアライズ用 private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { trace_for_serialize( "serializing - Interface" ); ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( DynamicMethodsPrototype ); ar & boost::serialization::make_nvp("pInterfaceClass", const_cast(pInterfaceClass) ); ar & BOOST_SERIALIZATION_NVP( vtblOffset ); ar & BOOST_SERIALIZATION_NVP( actualTypeParameters ); } public: Interface( const CClass *pInterfaceClass, const Types &actualTypeParameters ); Interface( const Interface &objInterface ) : DynamicMethodsPrototype( objInterface ) , pInterfaceClass( objInterface.pInterfaceClass ) , vtblOffset( objInterface.vtblOffset ) { } Interface() { } const CClass &GetClass() const { return *pInterfaceClass; } int GetVtblOffset() const { return vtblOffset; } void SetVtblOffset( int vtblOffset ) const { this->vtblOffset = vtblOffset; } const Types &GetActualTypeParameters() const { return actualTypeParameters; } std::string GetFullNameWithActualGenericTypeParameters() const; virtual bool Resolve( const ObjectModule &resolver ); }; typedef std::vector Interfaces;