[openrtm-users 00807] createComponentでのRTCのインスタンス名上書きについて
Yasuaki Odagiri
odagiri @ sec.co.jp
2009年 5月 29日 (金) 13:23:30 JST
OpenRTM-aist開発者各位
お世話になっております。
セック 小田桐です。
先日、安藤様から、1.0.0ではManager::createComponent()の引数で
RTCのプロパティを与えることができるため、NumberingPolicyに
関係なくインスタンス名を強制的に上書きできる、とお聞きしました。
そこで、早速試してみたですが、一部うまく動作していない箇所が
ございましたので、ご報告いたします。
SimpleIOのConsoleInComp.cppにて、以下のように、
Manager::createComponent()呼び出し時にインスタンス名を与えました。
manager->createComponent("ConsoleIn?instance_name=Test");
RTCを生成した後、Manager::configureComponent()内で、与えられた
プロパティをRTCに上書き(追加)することで、インスタンス名が
上書きされるようにしているのだと思います。
しかし、この後、RTObject_impl::getInstanceName()を呼び出すと、
上書きしたインスタンス名(Test)ではなく、FactoryCXX::create内で
設定されたインスタンス名(ConsoleIn0)が返ってきます。
原因は、Manager::configureComponent()で上書きされるのは
RTObject_implクラスのメンバ変数m_propertiesですが、
RTObject_impl::getInstanceName()で取得できるインスタンス名は
別なメンバ変数m_profileから取得していることです。
m_profileは、Manager::configureComponent()では上書きされません。
RTObject_impl::get_component_profile()では、m_propertiesから
インスタンス名を取得しているため正しく動作します。
RTObject_implクラスからm_profileを削除し、getInstanceName()や
getTypeName()などのメソッドも全てm_propertiesから値を
取得するようにしてはいかがでしょうか?
以上、ご検討をよろしくお願いいたします。
-----------------------------------------------------------
株式会社セック 開発本部 第一開発部
〒150-0031 東京都渋谷区桜丘町 22-14 NESビル
TEL: 03-5458-7741 FAX : 03-5458-7726
URL: http://www.sec.co.jp
小田桐 康暁 (Yasuaki ODAGIRI)
E-Mail: odagiri @ sec.co.jp
-----------------------------------------------------------
openrtm-users メーリングリストの案内