ути описаний на мові IDL.
В§ З кожним типом зіставлені метадані, тобто ознака типу та додаткова інформація, вигляд якої залежить від конкретного типу Як метадані, так і об'єкти будь-якого типу можуть бути створені динамічно, тобто без допомоги IDL.
В§ Присутній тип any, який може зберігати дані будь-якого типу У даній статті коротко розказано про основні сконструйованих типах даних, про рядках і про any. Крім того, трохи розказано про допоміжних класах, які генерує компілятор idl2cpp.
Звертаємо вашу увагу на те, що частина інформації в кожному з розділів відноситься до CORBA взагалі, а частина - тільки до відображення IDL на C + +.
Імена при відображенні на C + +
Для збільшення переносимості C + +-програм на різні платформи та операційні системи (на рівні вихідного коду) замість конкретних імен типів C + + - short, unsigned long, wchar_t, char *, bool і пр. - використовуються typedef- аліаси, наприклад, CORBA :: Short, CORBA :: ULong, CORBA :: WChar, CORBA :: String_ptr, CORBA :: Boolean. Використання typedef-аліасів при створенні CORBA-програм істотно спрощує їх розробку, особливо тому, що поряд з такими аліасами широко використовуються і допоміжні класи, наприклад, CORBA :: String_var. Типи, імена яких закінчуються на _var або _out, є надзвичайно корисними і зручними, хоча майже завжди можна обійтися і без них. p align="justify"> Типи _ptr не уявляють нічого цікавого - це просто typedef-синонім для покажчика:
typedef unsigned long CORBA :: ULong;
typedef CORBA :: ULong * CORBA :: ULong_ptr;
Зовсім інша справа - _var-класи.
_var-класи
_var-класи є чисто сервісними класами - якщо не хочете, можете їх не використовувати, але справа в тому, що використовувати їх надзвичайно зручно. Ці класи є оболонками навколо типів, описаних на IDL. По суті, їх можна розглядати як В«розумніВ» покажчики (smart pointer) - ці класи виконують звільнення зайнятих раніше ресурсів при їх знищенні або при виконанні операцій привласнення. Наведемо приклад використання рядків: один варіант - у класичному стилі C + +, інший - з використанням _var-класу CORBA. p align="justify"> Стиль C + +:
f (char * Stringarg1, char * Stringarg2)
{* str = new char [strlen (Stringarg1) + 1]; (str, Stringarg);
...
// витік пам'яті = new char [strlen (Stringarg2) + 1]; (str, Stringarg2); [] str;// не забудьте викликати явно!
Перше зауваження: так як рядки сильно відрізняються по довжині один від одного, програмісти зазвичай використовують для їх зберігання не статичну або стекову пам'ять, а динамічну, тому доводиться виконувати дв...