現在、リンクされたリストやグラフのように自分自身を指す
ノードを持つ複雑なクラスを変更しています。boost::interprocess関数を使用して共有メモリで使用したい。現在、汎用性を保ち、変更が最小限になるように再設計する方法を探しています。
template< class T >
class node {
public:
T data;
node* prev;
node* next;
};
再設計では、 boost ::interprocess::offset_ptr型の相対スマート ポインターを暗黙的に使用するために、 boost::interprocess ::allocatorアロケーターを使用する必要があります。次のような2番目のテンプレートパラメーターを含める必要があると思いました
template< class T, class alloc_type = std::allocator< node< T > > >
class node {
public:
T data;
typename alloc_type::pointer prev;
typename alloc_type::pointer next;
};
もちろん、参照の場合と同様に、循環依存関係のために機能しません。
それを実装する最善の方法について、C++ クラス テンプレートの専門家から助けを得られることを願っています。ブースト共有メモリ対応のコンテナーを見てみましたが、いくつかの外部クラスが関与するかなり複雑な方法で解決しています。
ジョー