[openrtm-users 02432] Re: (無題)

Ando Noriaki n-ando @ aist.go.jp
2012年 2月 9日 (木) 01:09:53 JST


小林さん

産総研 安藤です

コンストラクタの引数をポインタか参照渡しにすればよいかと。
コンストラクタで渡しているので、初期化子で渡して参照として保持できますね。

class provServiceSVC_impl {

public:
// コンストラクタ
provServiceSVC_impl(TimedLong& dataOut_original, // m_ はメンバ変数の接頭辞なので削除しました。
                                   OutPort<TimedLong>& dataOutOut_original,
                                   RTC::CorbaConsumer<consService>&
consService_original)
 : m_DataOut_cp(dataoutOut_original),
   m_DataOutOut_cp(dataOutOut_original),
   m_consService_cp(consService_original)
{
   : 続く
   :
private:
   TimedLong& m_DataOut_cp;
    OutPort<TimedLong>& m_DataOutOut_cp; // ここにm_DataOutOutのアドレスをコピーしたい
    RTC::CorbaConsumer<consService>& m_consService_cp; //
ここにm_consServiceのアドレスをコピーしたい

蛇足かもしれませんが、こういうことです↓

#include <iostream>
class A
{
  int m_value;
public:
  A(int value) : m_value(value /* value の値が m_value にコピーされる */ ) {}
  void print() { std::cout << m_value << std::endl; }
};

class B
{
  int& m_value;
public:
  B(int& value) : m_value(value /* value への参照がコピーされる */ ) {}
  void print() { std::cout << m_value << std::endl; /* class Bの外にある
m_value が指す変数の値を表示する */ }
};

int main(void)
{
  int value(123);
  A a(value);
  B b(value);

  a.print(); // 123と表示される
  b.print(); // 123と表示される

  value = 456;

  a.print(); // 123と表示される
  b.print(); // 456と表示される

  return 0;
}

値渡し、参照渡し、ポインタ渡し、初期化子について調べると幸せになれるかもしれません。



2012年2月8日19:08  <hiromu.kobayashi @ gmail.com>:
> 中央大学 小林です
> provServiceSVC_impl.cppとprovServiceSVC_impl.hの一部を上げたいと思います.
> 何卒,よろしくお願い致します. [provServiceSVC_impl.h] class
> provServiceSVC_impl : public virtual POA_provService, public virtual
> PortableServer::RefCountServantBase { private: // Make sure all instances
> are
> built on the heap by making the // destructor non-public //virtual
> ~provServiceSVC_impl(); public: /*! * @brief standard constructor */
> provServiceSVC_impl(TimedLong m_DataOut_original, OutPort
> m_DataOutOut_original, RTC::CorbaConsumer m_consService_original); /*! *
> @brief destructor */ virtual ~provServiceSVC_impl(); // attributes and
> operations CORBA::Short provServiceMethod(const char* prov_cmd); TimedLong*
> m_DataOut_cp; OutPort* m_DataOutOut_cp; //
> ここにm_DataOutOutのアドレスをコピーしたい RTC::CorbaConsumer*
> m_consService_cp; //
> ここにm_consServiceのアドレスをコピーしたい };
> [provServiceSVC_impl.cpp] // コンストラクタ
> provServiceSVC_impl::provServiceSVC_impl(TimedLong m_DataOut_original,
> OutPort m_DataOutOut_original, RTC::CorbaConsumer m_consService_original) {
> // ポートのアドレスを取得 m_DataOut_cp = &m_DataOut_original;
> m_DataOutOut_cp = &m_DataOutOut_original; m_consService_cp =
> &m_consService_original; } // メソッド CORBA::Short
> provServiceSVC_impl::provServiceMethod(const char* prov_cmd) { //
> コンシューマのサービスポートを呼び出す if( !CORBA::is_nil(
> (*m_consService_cp).getObject()) ){ (*m_consService_cp)->consServiceMethod(
> prov_cmd ); } // データポートでデータを送信する
> (*m_DataOut_cp).data = 1; (*m_DataOutOut_cp).write(); return 0; }
>
>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users


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