Я не могу найти ответ где угодно. Вопрос (?) Прост. Предположим, у меня есть такая функция:
class Sth {
private:
long u;
public:
void set(long u)
{
this.u = u;
}
};
и я запускаю это так:
Sth s;
CORBA::Long val = 5;
s.set(val);
Я могу это сделать? Все будет хорошо?
Это должно быть хорошо. Согласно справке IBM, длинный IDL находится в диапазоне -2 ^ 31 до 2 ^ 31-1 а также не менее 32 бит по размеру.
Должен конвертировать изначально в long
в с ++. Стандарт не определяет размер, но определяет минимальные диапазоны, которые эти значения могут содержать. CORBA::Long
является определением типа long
, который может меняться между платформами.
Вы могли бы использовать int_least32_t
(от <stdint.h>
, или же <cstdint>
), который является собственным типом, который гарантированно имеет ширину не менее 32 бит и typedef’d для соответствующего собственного типа компилятора.
Это зависит от того, какая часть IDL используется для сопоставления C ++, которое вы используете. В новом IDL для C ++ 11 отображение long в IDL сопоставляется с int32_t.