Changeset 728 in dev for trunk/ab5.0/abdev/ab_common


Ignore:
Timestamp:
Aug 21, 2008, 11:02:07 PM (16 years ago)
Author:
dai
Message:

#200への対応。ジェネリックインターフェイスを実装したジェネリッククラスのテンプレート展開に対応。

Location:
trunk/ab5.0/abdev/ab_common
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Class.h

    r672 r728  
    319319    bool InheritsClass( const CClass &inheritsClass, const Types &actualTypeParameters, int nowLine );
    320320
     321    // インターフェイス継承
     322    bool InheritsInterface( const CClass &inheritsInterfaceClass, const Types &actualTypeParameters, int nowLine );
     323
    321324    //メンバ、メソッドの追加
    322325    void AddDynamicMember( Member *pMember );
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Interface.h

    r640 r728  
    6969    }
    7070    Interface()
     71        : pInterfaceClass( NULL )
     72        , vtblOffset( NULL )
    7173    {
    7274    }
  • trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp

    r672 r728  
    110110
    111111    // 仮想関数になるメソッドに使用チェックをつける
    112     const CClass &objThis = *this;
    113     BOOST_FOREACH( const CMethod *pMethod, objThis.GetDynamicMethods() )
     112    const CClass &_class = *this;
     113    BOOST_FOREACH( const CMethod *pMethod, _class.GetDynamicMethods() )
    114114    {
    115115        if( pMethod->IsVirtual() )
     
    118118        }
    119119    }
    120 }
    121 
     120
     121    // インターフェイスメソッドに使用チェックをつける
     122    BOOST_FOREACH( const ::Interface *pInterface, _class.GetInterfaces() )
     123    {
     124        BOOST_FOREACH( const CMethod *pMethod, pInterface->GetDynamicMethods() )
     125        {
     126            pMethod->GetUserProc().Using();
     127        }
     128    }
     129}
    122130bool CClass::IsClass() const
    123131{
     
    268276
    269277    return true;
     278}
     279
     280bool CClass::InheritsInterface( const CClass &inheritsInterfaceClass, const Types &actualTypeParameters, int nowLine )
     281{
     282    if( !( this->IsInterface() || this->IsComInterface() ) )
     283    {
     284        Jenga::Throw( "非インターフェイスに対してCClass::InheritsInterfaceメソッドが呼ばれた" );
     285    }
     286
     287    // インターフェイスを継承する
     288    return this->InheritsClass( inheritsInterfaceClass, actualTypeParameters, nowLine );
    270289}
    271290
Note: See TracChangeset for help on using the changeset viewer.