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)
{
}