C++Builder における __property implements サポート
C++ の仕様:インデックス への移動
C++Builder では、__property
キーワード用に、implements
属性を導入します。implements
属性を利用すると、多重継承を使用せずにインターフェイスを効率的に実装できます。 これまで、TObject ベースのクラスではインターフェイスの実装が許されていました。 しかし、C++ でのインターフェイスの実装は Delphi に比べると長く退屈なものです。その主な理由は、C++ での多重継承の働き方にあります(「インターフェイスを実装する:Delphi および C++」参照)。
DAX 使用に役立つ implements 属性: __property implements
には、ActiveX について次の利点があります。
- DAX(Delphi ActiveX、C++Builder XE における ActiveX の新しいフレームワーク)が提供する ActiveX ヘルパを、C++ クラスで簡単に使用できる。
- C++Builder XE ActiveX プロジェクトにとって、ATL から DAX への遷移の作成が容易になる。
C++ __property
キーワードの impleme
nts 属性により、 インターフェイスをクラスの属性またはフィールドとして指定することで実装できます。 この実装は、Delphi の implements
指令により、クラスがプロパティへの委譲によりインターフェイスを実装する方法と同じです。
__property
文で、__nodefault
属性の配置と同様に、implements
属性を最後に置きます。
__property implements の構文
__property
キーワードの新しい implements
属性の構文は次のとおりです。
class TMyPersist: public TInterfacedObject
{
IPersist* FPersist;
public:
__property IPersist* Persist = {read=FPersist, write=FPersist, implements};
};
構文では、FPersist フィールドの初期化を省略します。 クラス コンストラクタが IPersist 用の DAX ヘルパの一部に対して FPersist を初期化します。
implements
属性に応えて、C++ コンパイラはインターフェイス(この場合は、IPersist)を TMyPersist(および FFooBar フィールドのオフセット)の RTTI の InterfaceTable に記録するようになります。
メモ:
__property implements
属性は、フィールドについてのみ機能し、取得アクセサや設定アクセサには機能しません。
完全なコード例については、「インターフェイスを実装する:Delphi および C++」を参照してください。