15.4 操作の実装

実装メンバー関数のシグネチャは、OMG IDL操作のマッピングされたシグネチャです。クライアント側のマッピングとは異なり、OMGの仕様では、サーバー側のマッピングの関数ヘッダーには適切な例外指定が含まれています。次のコード・スニペットは、例外指定の例を示しています。

// IDL
interface A
{
     exception B {};
     void f() raises(B);
};
// C++
class MyA : public virtual POA_A
{
   public:
      void f();
      ...
};

すべての操作および属性が原因でCORBAシステム例外が発生する可能性があるため、操作にraises句がない場合でも、すべての例外指定でCORBA::SystemExceptionを含める必要があります。

ノート:

C++コンパイラには違いがあるため、メソッド・シグネチャで「スロー宣言」を除外することをお薦めします。スローされる例外が宣言済メソッドで未宣言の例外がスローされた場合、システムによってはアプリケーション・サーバーがクラッシュすることもあります。

メンバー関数内で、「this」ポインタは、クラスで定義された実装オブジェクトのデータを参照します。データにアクセスするだけでなく、メンバー関数は同じクラスで定義されたほかのメンバー関数を暗黙的に呼び出すこともできます。次のコード・スニペットは、別のメンバー関数をコールする例を示しています。

// IDL
interface A
{
     void f();
     void g();
};
// C++
class MyA : public virtual POA_A
{
   public:
        void f();
        void g();
   private:
        long x_;
};
void
MyA::f();
{
       x_ = 3;
       g();
}

この方法でサーバント・メンバー関数が呼び出されるときは、CORBAオブジェクトの操作の実装としてではなく、単純にC++のメンバー関数として呼び出されています。