2014/09/27(土)template <T> struct intrusive_tree_base
だいぶ前に書いた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を学ぶにつれて、だんだんこういうかゆいところにも手が届くように、なってきたりする。
2014/01/18(土)x86 で cntlz64
Counting of Leading Zeros.
Number of Leading Zeros. ともいう。
64bitのnlzをx86で求めるにはどうすりゃええんか? と思っていろいろいじってた。