#pragma once class Delegate : public Procedure , public Jenga::Common::ObjectInHashmap { // importされている名前空間 NamespaceScopesCollection importedNamespaces; std::string paramStr; std::string returnTypeName; int sourceIndex; Parameters dynamicParams; // XMLシリアライズ用 private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { trace_for_serialize( "serializing - Delegate" ); ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure ); if( ActiveBasic::Common::Environment::IsRemoveExternal() ) { if( this->IsExternal() ) { this->NeedResolve(); return; } } ar & BOOST_SERIALIZATION_NVP( importedNamespaces ); ar & BOOST_SERIALIZATION_NVP( dynamicParams ); } public: Delegate( const Symbol &symbol, const NamespaceScopesCollection &importedNamespaces, Procedure::Kind procKind, const char *paramStr, const std::string &returnTypeName, int sourceIndex ) : Procedure( symbol, procKind, false ) , importedNamespaces( importedNamespaces ) , paramStr( paramStr ) , returnTypeName( returnTypeName ) , sourceIndex( sourceIndex ) { } Delegate() { } const NamespaceScopesCollection &GetImportedNamespaces() const { return importedNamespaces; } const std::string &GetParamStr() const { return paramStr; } const std::string &GetReturnTypeName() const { return returnTypeName; } void SetReturnType( const Type &returnType ) { this->returnType = returnType; } int GetSourceIndex() const { return sourceIndex; } virtual const std::string &GetKeyName() const { return GetName(); } const Parameters &GetDynamicParams() const { return dynamicParams; } Parameters &GetDynamicParams() { return dynamicParams; } /*! @brief オーバーライド用にデリゲート同士が等しいかどうかをチェックする @param dgt 照らし合わせるデリゲート */ bool IsSimilar( const Delegate &dgt ) const; virtual bool Resolve( const ObjectModule &resolver ); }; typedef Jenga::Common::Hashmap Delegates;