В настоящее время я модифицирую сложный класс, в котором узлы указывают на себя , как связанные списки или графики. Я хочу, чтобы он использовался в общей памяти, используя функции boost :: interprocess . Сейчас я ищу способ перестроить его так, чтобы он оставался общим и содержал наименьшие изменения.
template< class T >
class node {
public:
T data;
node* prev;
node* next;
};
Редизайн должен использовать boost :: interprocess :: allocator allocator, чтобы неявно использовать относительные умные указатели типа boost :: interprocess :: offset_ptr . Я думал, что это должно включать второй параметр шаблона, как
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 ++ pro, чтобы узнать, как лучше всего это реализовать. Я посмотрел на контейнеры с поддержкой расширенной совместно используемой памяти, но они решают ее довольно сложным образом, включающим несколько внешних классов.
Джох