C++Builder における __property implements サポート

提供: RAD Studio
移動先: 案内検索

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 キーワードの implements 属性により、 インターフェイスをクラスの属性またはフィールドとして指定することで実装できます。 この実装は、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++」を参照してください。



関連項目