2014-02-13 7 views
3

Мы используем OmniORB с нашим сервером C++. В настоящее время, когда объект указан как char в файле IDL, он переводится в unsigned char в C++. Мы хотим, чтобы это было всего лишь char. Есть ли что-то, что мы можем изменить, чтобы это произошло?CORBA IDL на C++ - символ против неподписанного символа?

+0

Да, настройте ваш компилятор для обработки символа как неподписанного по умолчанию (т. Е. '-funsigned-char'). –

+2

«Могу я изменить CORBA IDL на C++ Mapping» - фраза, произнесенная тысячами программистов на C++ в конце 90-х годов. –

+0

Я не знаю деталей OmniORB, но TAO (см. Http://download.dre.vanderbilt.edu) использует тип char C++ для char IDL. Изменив сопоставление IDL, взгляните на новое сопоставление языков IDL на C++ 11, которое понимает, что люди, о которых говорили люди, долго говорили (см. Http://www.omg.org/spec/CPP11/) , мы реализуем его как часть TAOX11 (см. http://swsupport.remedy.nl). –

ответ

3

Это определяется реализацией (page 15 in the spec) какие типы IDL boolean, char и octet карту в.

omniORB chooses to:

... 
typedef unsigned char _CORBA_Char; 
typedef unsigned char _CORBA_Octet; 
... 

Вы можете изменить источники OmniORB, хотя я сомневаюсь, что это было бы хорошей идеей. Или вы можете принять, что CORBA::Char не представляет тип C++ char.

1

Я бы рекомендовал использовать CORBA::Char при вызове функций, которые являются прямыми вызовами CORBA и присваивают возвращаемые значения таких функций.

Если вам нужно преобразовать их в/из «char» или «unsigned char», то static_cast должен выполнить эту работу.