Можно ли передать long вместо CORBA :: Long и т. Д.?

Я не могу найти ответ где угодно. Вопрос (?) Прост. Предположим, у меня есть такая функция:

class Sth {

private:
long u;
public:
void set(long u)
{
this.u = u;
}

};

и я запускаю это так:

Sth s;
CORBA::Long val = 5;
s.set(val);

Я могу это сделать? Все будет хорошо?

0

Решение

Это должно быть хорошо. Согласно справке IBM, длинный IDL находится в диапазоне -2 ^ 31 до 2 ^ 31-1 а также не менее 32 бит по размеру.

Должен конвертировать изначально в long в с ++. Стандарт не определяет размер, но определяет минимальные диапазоны, которые эти значения могут содержать. CORBA::Long является определением типа long, который может меняться между платформами.

1

Другие решения

Вы могли бы использовать int_least32_t (от <stdint.h>, или же <cstdint>), который является собственным типом, который гарантированно имеет ширину не менее 32 бит и typedef’d для соответствующего собственного типа компилятора.

1

Это зависит от того, какая часть IDL используется для сопоставления C ++, которое вы используете. В новом IDL для C ++ 11 отображение long в IDL сопоставляется с int32_t.

1