Модель делегирования предлагает альтернативный способ реализации серванта. При использовании этой модели вам не нужно наследовать ваш сервант от MyInterface. Вместо этого вы создаете класс, реализующий методы, объявленные в интерфейсе, но наследовать этот класс может от кого угодно.
Класс серванта, который генерируется компилятором idl2cpp, реализует все необходимые методы, в том числе и методы, объявленные в IDL-интерфейсе. Поскольку компилятор IDL, естественно, не знает, что должны выполнять эти функции, то интересно посмотреть, каким образом можно сгенерировать такой код. На самом деле нет ничего проще:
// IDL
interface MyInterface
{
void foo();
};
// C++
template
{
private:
T* _ptr;
…
public:
POA_MyInterface_tie(T& arg) : _ptr(t) { … }
void foo() throw (CORBA::SystemException) { _ptr->foo(); }
…
};
Этот template-класс просто определяет конструктор, которому в качестве параметра передают объект независимого класса, содержащего реальную реализацию метода foo(). Вот и все.
Модель делегирования может оказаться полезной, когда вы хотите по каким-то причинам иметь независимую от навязанной CORBA иерархию наследования. В C++, как в языке, поддерживающем множественное наследование, эта проблема стоит не так остро, вы всегда можете строить для сервантов двойную иерархию – одну свою, другую CORBA. В Java эта модель применяется чаще.