2014/09/27(土)template <T> struct intrusive_tree_base

はてブ数 2014/09/26 16:45 プログラミング::C++つーさ

だいぶ前に書いたC++で木構造どうしようの記事
template <class T> class TreeNode { ... }; の中身は?

template<T>
struct TreeNode {
  TreeNode<T> *parent, *child_left, *child_right;
}

とかつくったら、
TreeNode<OBJECT_T *> pObject; の子供のメンバにアクセスするたびに
static_cast<OBJECT_T *>(pObject->child_left)->SomeMember;
みたいに static_cast すんのか?

という疑問に対する一つの答えが

template<T>
struct intrusive_tree_base<T>
{
  T *parent, *child_left, *child_right;
}

struct SomeTreeNode : public intrusive_tree_base<SomeTreeNode>
{
  SomeType SomeMember;
};

すればいいじゃないということに気づいた。

というわけで、実際に実装してみた。

intrusive_tree_base
https://gist.github.com/ttsuki/5b0498518f99f1fd2b78

C++11を学ぶにつれて、だんだんこういうかゆいところにも手が届くように、なってきたりする。