Changeset 352 in dev for trunk


Ignore:
Timestamp:
Oct 19, 2007, 2:51:36 AM (17 years ago)
Author:
dai_9181
Message:

基底クラスからインターフェイスメソッドを実装できるようにした。

Location:
trunk/abdev/BasicCompiler_Common
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/include/Method.h

    r351 r352  
    6161    virtual const CClass *GetInheritsClassPtr() const = 0;
    6262    virtual void SetInheritsClassPtr( const CClass *pInheritsClass ) = 0;
     63    virtual bool IsNotUse() const = 0;
     64    virtual void SetNotUseMark( bool isNotUse ) = 0;
    6365};
    6466
     
    6971    bool isConst;
    7072    const CClass *pInheritsClass;
     73
     74    // 他のインターフェイスへ実装が移った場合(基底クラスメソッドのインターフェイス実装)はこのフラグをオンにする
     75    bool isNotUse;
    7176
    7277    // XMLシリアライズ用
     
    8287        ar & BOOST_SERIALIZATION_NVP( isConst );
    8388        ar & boost::serialization::make_nvp("pInheritsClass", const_cast<CClass *&>(pInheritsClass));
     89        ar & BOOST_SERIALIZATION_NVP( isNotUse );
    8490    }
    8591
     
    9197        , isConst( isConst )
    9298        , pInheritsClass( pInheritsClass )
     99        , isNotUse( false )
    93100    {
    94101    }
     
    99106        , isConst( method.IsConst() )
    100107        , pInheritsClass( method.GetInheritsClassPtr() )
     108        , isNotUse( false )
    101109    {
    102110    }
     
    138146    {
    139147        this->pInheritsClass = pInheritsClass;
     148    }
     149    virtual bool IsNotUse() const
     150    {
     151        return isNotUse;
     152    }
     153    virtual void SetNotUseMark( bool isNotUse )
     154    {
     155        this->isNotUse = isNotUse;
    140156    }
    141157};
     
    187203    virtual const CClass *GetInheritsClassPtr() const{SetError();return NULL;}
    188204    virtual void SetInheritsClassPtr( const CClass *pInheritsClass ){SetError();}
     205    virtual bool IsNotUse() const
     206    {
     207        return false;
     208    }
     209    virtual void SetNotUseMark( bool isNotUse )
     210    {
     211        SetError();
     212    }
    189213};
    190214BOOST_CLASS_EXPORT( StaticMethod );
  • trunk/abdev/BasicCompiler_Common/src/Class.cpp

    r351 r352  
    459459
    460460    /////////////////////////////////////////////////////////////////
    461     // 基底クラスのメソッドからインターフェイスメソッドを再実する
     461    // 基底クラスのメソッドからインターフェイスメソッドを再実する
    462462    /////////////////////////////////////////////////////////////////
    463463    BOOST_FOREACH( CMethod *pMethod, GetDynamicMethods() )
     
    467467        {
    468468            pMethodForOverride->Override( &pMethod->GetUserProc(), pMethod->GetAccessibility(), false );
     469
     470            // 実装元になるメソッドは呼び出し不可にしておく(オーバーロードの解決から除外する)
     471            pMethod->SetNotUseMark( true );
    469472        }
    470473    }
  • trunk/abdev/BasicCompiler_Common/src/Method.cpp

    r351 r352  
    109109    const Methods &methods = *this;
    110110    for( int i=(int)methods.size()-1; i>=0; i-- ){
    111         if( methods[i]->GetUserProc().GetName() == methodName ){
     111        if( methods[i]->GetUserProc().GetName() == methodName && methods[i]->IsNotUse() == false ){
    112112            subs.push_back( &methods[i]->GetUserProc() );
    113113        }
Note: See TracChangeset for help on using the changeset viewer.