1

nodeから継承する次のものを宣言しましたboost::intrusive::slist_base_hook<>

class InputBufferSglNode : public boost::intrusive::slist_base_hook<>

これらのノードを含むリストの宣言:

class InputBufferSglList : public boost::intrusive::slist<InputBufferSglNode, boost::intrusive::cache_last<true>>

InputBufferSglListメンバー関数からルートノードを取得したいので、実行しようとしまし
InputBufferSglNode* node = this->get_root_node();
たが、エラーが発生しました:

error: cannot initialize a variable of type 'InputBufferSglNode *' with an rvalue of type 'node_ptr' (aka 'boost::intrusive::slist_node<void *> *')

にキャストnode_ptrする必要がありInputBufferSglNode*ますか? どのキャスティングですか?

4

1 に答える 1

1

get_root_nodeドキュメント化された API の一部ではありません。

何方をお探しですか

InputBufferSglNode& node = *this->begin();

逆に興味がある場合:


更新

ドキュメントでさらに読んだことがありますが、リスト型に派生した value_traits を使用して、必要なことを実行できる方法があります。

InputBufferSglNode* node = 
      InputBufferSglList::value_traits::to_value_ptr(list.get_root_node());

これは、すべての侵入型コンテナの基礎となるValueTraits インターフェースを使用します。

すべての通常のノード デフォルト フックでは、オフセット演算が少し発生します (メンバー アドレスからノード アドレスへの取得など)。しかし実際には、クラス階層の上下にキャストする必要がある場合があります (特に仮想ベースが関係する場合)。

trivial_value_traitsの場合to_value_ptrto_node_ptrが恒等関数になります。

于 2014-11-30T19:01:03.063 に答える