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++のメンバー関数として呼び出されています。
親トピック: サーバー側マッピング