13.1.24 属性

OMG IDLの読取り専用の属性は、属性値を返すC++関数にマッピングされます。読み書き属性は、2つのオーバーロードC++関数にマッピングされます。2つの関数で1つは属性値を返し、もう1つは属性値を設定します。オーバーロードのメンバー関数の名前が属性の名前になります。

属性は操作の生成と同じ方法で生成されます。属性は、仮想クラスとスタブ・クラスの両方で定義します。たとえば、次のOMG IDL定義を考えます:

// OMG IDL
module INVENT
    {
    interface Order
        {
        . . .
        attribute itemStruct itemInfo;
        };
};

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

// C++
class INVENT
    {
    . . .
    class Item : public virtual CORBA::Object
        {
        . . .
         virtual itemStruct * itemInfo ( ) = 0;
        virtual void itemInfo (
            const itemStruct & itemInfo) = 0;
        };
    };
class Stub_Item : public Item
    {
    . . .
        itemStruct * itemInfo ();
        void itemInfo (
          const itemStruct & itemInfo);
    };

生成されたクライアント・アプリケーション・スタブには、スタブ・クラスに対して生成された次のコードが格納されます:

// ROUTINE NAME:      INVENT::Stub_Item::itemInfo
//
// FUNCTIONAL DESCRIPTION:
//
//   Client application stub routine for attribute
//   INVENT::Stub_Item::itemInfo. (Interface : Item)
INVENT::itemStruct * INVENT::Stub_Item::itemInfo ( )
{
. . .
}
//
// ROUTINE NAME:      INVENT::Stub_Item::itemInfo
//
// FUNCTIONAL DESCRIPTION:
//
//  Client application stub routine for attribute
//  INVENT::Stub_Item::itemInfo. (Interface : Item)
void INVENT::Stub_Item::itemInfo (
  const INVENT::itemStruct & itemInfo)
{
}