13.1.18 操作の実装
実装メンバー関数のシグネチャは、OMG IDL操作のマッピングされたシグネチャです。クライアント側と異なり、サーバー側のマッピングでは、関数ヘッダーに適切な例外(throw)指定を含める必要があります。これにより、いつ無効な例外が発生したかをコンパイラで検出できるようになります。これは、ローカルC++からC++ライブラリへの呼出しを行う場合に必要です。この作業を行わない場合、呼出しでは有効な例外をチェックするラッパーを通過してしまいます。例:
// IDL
interface A
{
exception B {};
void f() raises(B);
};
// C++
class MyA : public virtual POA_A
{
public:
void f() throw(A::B, CORBA::SystemException);
...
};すべての操作および属性が原因でCORBAシステム例外が発生する可能性があるため、操作にraises句がない場合でも、すべての例外指定でCORBA::SystemExceptionを含める必要があります。
メンバー関数内で、「this」ポインタは、クラスで定義された実装オブジェクトのデータを参照します。データにアクセスするだけでなく、メンバー関数は同じクラスで定義されたほかのメンバー関数を暗黙的に呼び出すこともできます。例:
// IDL
interface A
{
void f();
void g();
};
// C++
class MyA : public virtual POA_A
{
public:
void f() throw(SystemException);
void g() throw(SystemException);
private:
long x_;
};
void
MyA::f() throw(SystemException)
{
this->x_ = 3;
this->g();
}ただし、この方法でサーバント・メンバー関数が呼び出されるときは、CORBAオブジェクトの操作の実装としてではなく、単純にC++のメンバー関数として呼び出されます。このような場合、POA_Currentオブジェクトで利用可能な情報はすべて、メンバー関数の呼出し自体ではなく、C++メンバー関数の呼出しを実行したCORBAリクエストの呼出しを参照します。
親トピック: マッピング