Hitachi

VisiBroker Version 5 Borland(R) Enterprise Server VisiBroker(R) プログラマーズリファレンス


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