Объявление атрибута логически эквивалентно объявлению пары функций доступа, одна для чтения значения атрибута и одна для его записи (вы также можете иметь readonly
атрибуты, в этом случае вы получите только чтение функция).
Это явствует из спецификации CORBA. что вы можете поместить имя интерфейса в качестве имени атрибута. Я попытался передать такой IDL в переводчик omniORB IDL в C ++, и он не отверг его. Поэтому я думаю, что это разрешено.
Но я действительно не уверен, что вы захотите сделать это на практике. Большинство экспертов CORBA рекомендуют, чтобы, если вы собираетесь использовать атрибуты, вы использовали только атрибуты readonly
. А для чего-то подобного я бы просто объявил свою собственную функцию, которая возвращала интерфейс.
Обратите внимание, что вы все равно не можете использовать синтаксис, который вы хотите в отображении C ++; например,
server->brakePedal()->press(); // major resource leak here
brakePedal()
- это функция доступа к атрибуту, которая возвращает ссылку на объект CORBA. Если вы немедленно вызовете press()
, вы потеряете ссылку на объект.
Чтобы сделать это без утечки, вы должны сделать что-то вроде этого:
BrakePedal_var brakePedal(server->brakePedal());
brakePedal->press();
Вы просто не можете получить удобство обозначений, которое вы хотите от атрибутов в этом сценарии с отображением C ++ (возможно, вы могли бы в отображении Python). Из-за этого и из-за моей общей неприязни к атрибутам я бы просто использовал обычную функцию для возврата интерфейса BrakePedal.