タイプセーフなデータキュー

Home > 2005-11 / 実装技術 > This Entry [com : 0][Tb : 0]

2005-11-07

 μITRONのデータキューは、送受信可能なデータ型がVP_INT型ですので、決して型安全であるとはいえません。そこで、少し工夫することで、(あくまでも静的なものですが)型安全なデータキューを作ることができます。

template <class T>
class typesafe_dataqueue
{
  ID id_;
public:
  explicit typesafe_dataqueue(ID dtqid) : id_(dtqid) {}
  ER send(std::auto_ptr<T> data)
  {
    return snd_dtq(id_, data.release());
  }
  ER receive(std::auto_ptr<T>* p_data)
  {
    assert(p_data != 0);
    VP_INT data;
    ER ercd = rcv_dtq(id_, &data);
    p_data->reset((T*)data);
    return ercd;
  }
};



 上のコードでは送受信部分の最低限の部分だけを実装していますが、必要に応じてタイムアウト指定やポーリング指定のためのメンバ関数を追加することも簡単です。

また、このコードではauto_ptrを使うことで、オブジェクトの所有権を明確にしています。単にポインタを送るだけで、所有権まで渡さないようにすることも可能ですが、その場合は明示的に別のクラスを作った方が無難です。あるいは、テンプレート引数をもう一つ追加して、所有権の扱い方をどうするか指定するようにしてもよいでしょう。





Comment

Post a Comment









管理者にだけ表示を許可

Trackback

http://cppemb.blog17.fc2.com/tb.php/41-523623c7

C++と組み込み環境 | Page Top▲

New >>
2進定数の書き方
<< old
累乗定数
ブログ内検索
RSSフィード