週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

型レベルリストを二つ使用したQueueであるSimpleQueueをリファクタしました。以前の実装(本体遅い部分を直したもの)をベースに、前回のインターフェスを使うように書きなおしました。

// Queue共通のインターフェス。
template<typename Q_, typename A_> struct Push {};
template<typename Q_> struct Top {};
template<typename Q_> struct Pop {};
template<typename Q_> struct IsEmpty {};

// SimpleQueueの実体。
template<typename Front_, typename Rear_>
struct SimpleQueue {};

// 各種メソッドの実装。
template<>
struct IsEmpty<SimpleQueue<NullType, NullType> > {
  enum {value = 1};
};
template<typename Front_, typename Rear_>
struct IsEmpty<SimpleQueue<Front_, Rear_> > {
  enum {value = 0};
};

template<typename Front_, typename Rear_, typename A_>
struct Push<SimpleQueue<Front_, Rear_>, A_> {
  typedef SimpleQueue<Front_, TList<A_, Rear_> > type;
};

template<typename Rear_>
struct Top<SimpleQueue<NullType, Rear_> >
  : public Head<typename Reverse<Rear_>::type> {};
template<typename Hd_, typename Front_, typename Rear_>
struct Top<SimpleQueue<TList<Hd_, Front_>, Rear_> > {
  typedef Hd_ type;
};

template<typename Rear_>
struct Pop<SimpleQueue<NullType, Rear_> > {
  typedef SimpleQueue<typename Tail<typename Reverse<Rear_>::type>::type,
		      NullType> type;
};
template<typename Hd_, typename Front_, typename Rear_>
struct Pop<SimpleQueue<TList<Hd_, Front_>, Rear_> > {
  typedef SimpleQueue<Front_, Rear_> type;
};
// 空のSimpleQueue.
typedef SimpleQueue<NullType, NullType> EmptySimpleQueue;

前よりはるかに短くなりました。mpl方式は偉大です。

スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://gusmachine.blog49.fc2.com/tb.php/447-fc422f84
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。