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で求めるにはどうすりゃええんか? と思っていろいろいじってた。