[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 メーリングリストの案内