long | -231 - 231-1 | ? 32 бит |
short | -215 - 215-1 | ? 16 бит |
unsigned long | 0 - 232-1 | ? 32 бит |
unsigned short | 0-216-1 | ? 16 бит |
float | IEEE с обычной точностью | ? 32 бит |
double | IEEE с двойной точностью | ? 64 бит |
char | ISO | ?8 бит |
string | ISO | Переменный |
boolean | TRUE ИЛИ FALSE | Не определен |
octet | 0-255 | ?8 бит |
any | Произвольный тип, идентифицируемый динамически | ПеременныйПеременный |
Даже после того как IDL-компилятор создаст из определения интерфейса С++-код, реализация методов интерфейсного класса остается все еще неопределенной. IDL-компилятор создает несколько С++- конструкций, которые предназначены для использования в качестве базовых классов. В листинге 8.3 показано два класса, сгенерированных MICO IDL-компилятором на основе файла
// Листинг 8.3. Два класса, сгенерированные
// MICO IDL-компилятором из файла
// adding_machine.idl
class adding_machine : virtual public CORBA::Object{
public:
virtual ~adding_machine();
#ifdef HAVE_TYPEDEF_OVERLOAD
typedef adding_machine_ptr _ptr_type;
typedef adding_machine_var _var_type;
#endif
static adding_machine_ptr _narrow(CORBA::Object_ptr obj );
static adding_machine_ptr _narrow(CORBA::AbstractBase_ptr obj );
static adding_machine_ptr _duplicate(adding_machine_ptr _obj ){
CORBA::Object::_duplicate (_obj); return _obj;
}
static adding_machine_ptr _nil(){
return 0;
}
virtual void *_narrow_helper( const char *repoid );
static vector<CORBA::Narrow_proto> *_narrow_helpers;
static bool _narrow_helper2( CORBA::Object_ptr obj );
virtual void add( CORBA::ULong X ) = 0;
virtual void subtract( CORBA::ULong X ) = 0;
virtual CORBA::Long result() = 0;
protected:
adding_machine(){};
private:
adding_machine( const adding_machine& );
void operator=( const adding_machine& );
};
class adding_machine_stub : virtual public adding_machine{
public:
virtual ~adding_machine_stub();
void add( CORBA::ULong X );