20.10 抽象インタフェース
抽象インタフェースで,オブジェクトをリファレンス(IOR)で渡すか,または値(valuetype)で渡すかを実行時に決定するには,プリフィクス"abstract"を,インタフェース宣言前に使用します。
- コードサンプル20-51 IDLコードサンプル
abstract interface foo { void func(): };
抽象インタフェースをサポートするvaluetypeは,その抽象インタフェースとして渡せます。抽象インタフェースはコードサンプル20-52に示すように宣言されます。
- コードサンプル20-52 抽象インタフェースとしてのvaluetype
valuetype vt supports foo { ... };
抽象インタフェースとして渡す必要があるインタフェースはコードサンプル20-53に示すように宣言されます。
- コードサンプル20-53 抽象インタフェースとしてのインタフェース
interface intf : foo { };
コードサンプル20-53で宣言したfooという抽象インタフェースのC++マッピングの結果は,コードサンプル20-54のようなクラスになります。
- コードサンプル20-54 抽象インタフェースのC++マッピング
class foo_var : public CORBA::_var{ ... }; class foo_out{ ... }; class foo : public virtual CORBA:::AbstractBase{ private: ... void operator=(const foo&) {} protected: foo(); foo(const foo& ref) {} virtual ~foo() {} public: static CORBA::Object* _factory(): foo_ptr _this(); static foo_ptr _nil() { ... } static foo_ptr _narrow(CORBA::AbstractBase* _obj); static foo_ptr _narrow(CORBA::Object_ptr _obj); static foo_ptr _narrow(CORBA::ValueBase_ptr _obj); virtual void func() = 0; ... }; class _vis_foo_stub : public virtual foo, public virtual CORBA::Object { public : _vis_foo_stub() {} virtual ~_vis_foo_stub() {} ... virtual void func(): };
_varクラス,_outクラス,およびメソッドを実装するCORBA::AbstractBaseから派生したクラスがあります。