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から派生したクラスがあります。