13.1.11 例外

OMG IDLの例外は、C++のクラスにマッピングされます。C++クラスには、次のものが格納されています。

  • コンストラクタ
  • デストラクタ
  • 例外型を判別する静的_narrow関数

生成されるクラスは可変長構造体と似ていますが、初期化を簡単にするための追加コンストラクタ、およびUserExceptionの型を判別するための静的_narrowメンバー関数が含まれています。

たとえば、次のOMG IDL定義を考えます:

// OMG IDL
module INVENT
    {
    exception NonExist
        {
        ID BadId;
        };
};

この定義は、次のようにC++にマッピングされます:

// C++
class INVENT
    {
    . . .
    class NonExist : public CORBA::UserException
        {
        public:
            static NonExist * _narrow(CORBA::Exception_ptr);
            NonExist (ID _BadId);
            NonExist ();
            NonExist (const NonExist &);
            ~NonExist ();
            NonExist & operator=(const NonExist &);
            void _raise ();
            ID BadId;
         };
};

Exceptionクラスの属性(データ・メンバー)はパブリックなので、直接アクセスできます。