2013年1月4日金曜日

typedefのおさらい

C#のプロパティような振る舞いを実装するで関数ポインタをtypedefで定義したのですが少し手間取りました。

///
/// 符号あり16ビット長をINT16と定義する
///
typedef signed short INT16

「signed short」を「INT16」に定義するとずっと思い込んでいたのが間違いでした。正確には「typedef <型宣言>」のようで関数ポインタを定義するには次のようにすれば良いようです。

///
/// プロパティクラスの宣言の一部
///
template<typename H, typename T>
class Property
{
 typedef T (H::*GET)(void) const;
 typedef void (H::*SET)(const T&);
 
 H* _host;
 GET _get;
 SET _set;
};

このように定義するとGETとSETという名前で関数ポインタを扱うことができるようになります。

0 件のコメント:

コメントを投稿