11.4.2 IDLコンパイラが生成するクラステンプレート

POA_exampleクラスに加えて,IDLコンパイラは_tie_exampleという名前のクラステンプレートを生成します。このテンプレートは,クラスをPOA_exampleから派生させたくない場合に使用します。テンプレートは,新しいクラスを継承するために変更できない既存のアプリケーションのオブジェクトラッパークラスを提供する場合に役立ちます。コードサンプル11-12に,exampleクラス用にIDLコンパイラが生成したテンプレートクラスを示します。

コードサンプル11-12 exampleクラス用に生成したテンプレートクラス(C++)

template <class T>
class POA_example_tie : public POA_example {
  public:
     POA_example_tie (T& t): _ptr(&t), _poa(NULL),
                          _rel((CORBA::Boolean)0) {}
     POA_example_tie (T& t, PortableServer::POA_ptr poa):
                          _ptr(&t),
        _poa(PortableServer::_duplicate(poa)),
                          _rel((CORBA::Boolean)0) {}
     POA_example_tie (T *p, CORBA::Boolean release= 1)
        : _ptr(p), _poa(NULL), _rel(release) {}
     POA_example_tie (T *p, PortableServer::POA_ptr poa,
                          CORBA::Boolean release =1)
        : _ptr(p), _poa(PortableServer::_duplicate(poa)),
                          _rel(release) {}
     virtual ~POA_example_tie() { /* . . . */ }
     T* _tied_object() { /* . . . */ }
     void _tied_object(T& t) { /* . . . */ }
     void _tied_object(T *p, CORBA::Boolean release=1)
                          { /* . . . */ }
     CORBA::Boolean _is_owner() { /* . . . */ }
     void _is_owner(CORBA::Boolean b) { /* . . . */ }
     CORBA::Long op1(CORBA::Char _x, CORBA::Short_out _y)
                          { /* . . . */ }
     PortableServer::POA_ptr _default_POA() { /* . . . */ }
};

_tieテンプレートクラスの使用については,「9. tie機能の使用」を参照してください。

オブジェクトデータベースとユーザのサーバを統合するために,_ptieテンプレートを生成することもできます。