[openrtm-users 00501] Re: 質問:サービスポートのIDLにおいて、複数のIDL間で、共通に利用する型を参照する方法

Kentaro Oda / 小田 謙太郎 oda @ ci.kyutech.ac.jp
2008年 7月 2日 (水) 16:19:40 JST


産総研 安藤様
九工大 小田です。

早速の詳細なご回答ありがとうございます。

複数のIDLを一つのIDLに統合してしまうという最初の 
方法が、一番シンプルですね。

rtc-templateのhelp
>> "    --consumer-idl=[IDL filename]:
>>       Specify IDL file of service consumer.
>>       For simplicity, please define one interface in one IDL file,  
>> although
>>       this IDL file can include two or more interface definition,"
は、「お互いに依存関係がない間は」という条件つきということですね。

実は今まで、私は3番目の方法に近い方法で乗り切っていまし 
たが、手動のpatchでは追いつかず、システマティックな
方法が必要だと考えてきました。

一方で私は、IDLを依存関係があるにせよ一番の方法のように 
統合して扱うのも制約がきついと考えております。
#というのも、複数の組織から提出される複数のIDLを取り扱 
う場合、インターフェースの数が増えることや内容に変更が多くな 
されることが考えられ、
#これらに素早く対応するためには、適切な粒度で分割したIDL 
を用意する必要があると考えています。

そこでいまは、自動的に複数のIDLを一つに統合するようなプ 
リプロセッサ的な仕組みが必要かなと考えています。

丁寧なご回答、ありがとうございました。

On 2008/07/01, at 18:42, Ando Noriaki wrote:

> 小田様
>
> 産総研 安藤です
>
> 方法は3つ位あります。
>
> 一番簡単な方法は、以下のように一つのIDLに記述すること 
> です。
> Observer と Notifier は Subject で相互に依存し 
> てますので、
> それほど変なやり方じゃないと思います。
>
> 好みの問題になりますが、IDLはあまり分割しないのが一般 
> 的です。
> OpenRTMに付属のIDLを見ていただければわかると思いますが、
> ある機能を提供するインターフェースのセットをまとめてIDL 
> で定義しています。
> CORBAのその他のIDL定義も、それほど細かく分割されてい 
> ません。
>
> 原理的には分割しても、ちゃんとコンパイルできなければならな 
> いのですが、
> rtc-templateはファイル間の依存関係まで調べてコードを生成し 
> ているわけでは
> ありませんので、複雑依存関係のあるIDLの場 
> 合、Makefileやコードなどに
> いろいろ手直しが必要になります。
>
> -------------------------Observer.idl---------------------------
> interface Subject {
>        void    foo();
> };
>
> interface Observer {
>        void listenUpdate(in Subject aSubject);
> };
>
> interface Notifier {
>       void    notifyUpdate(in Subject aSubject);
> };
> -------------------------Observer.idl---------------------------




openrtm-users メーリングリストの案内