интрузивные/неинтрузивные контейнеры
От: Аноним  
Дата: 08.12.08 13:27
Оценка:
Читаю страуструпа, у него всплыло такое понятие.
Может кто-нить объяснить что это значит?
Re: интрузивные/неинтрузивные контейнеры
От: Аноним  
Дата: 08.12.08 13:33
Оценка:
А>Читаю страуструпа, у него всплыло такое понятие.
А>Может кто-нить объяснить что это значит?
Интрузивный контейнер — это контейнер который требует каких либо изменений кода класса, чтобы он мог быть в него помещен.
Re[2]: интрузивные/неинтрузивные контейнеры
От: Аноним  
Дата: 08.12.08 13:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>Читаю страуструпа, у него всплыло такое понятие.

А>>Может кто-нить объяснить что это значит?
А>Интрузивный контейнер — это контейнер который требует каких либо изменений кода класса, чтобы он мог быть в него помещен.
Т.е., допустим, контейнер принимающий объекты наследованные от какого-то общего класса.
Re: интрузивные/неинтрузивные контейнеры
От: MShura  
Дата: 08.12.08 13:54
Оценка:
А>Читаю страуструпа, у него всплыло такое понятие.
А>Может кто-нить объяснить что это значит?

Если хочешь структуру my_struct поместить в двусвязанный список, то возможны варианты

интрузивный список:
struct list_head
{
  list_head *next, *prev;
};

struct my_struct
{
  ...
  list_head entry; // добавить этот элемент
}


обычный список:
struct list
{
  list *next, *prev;
  my_struct* data;
};

struct my_struct // структура не меняется
{
  ...
}
Re: интрузивные/неинтрузивные контейнеры
От: sokel Россия  
Дата: 09.12.08 10:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Читаю страуструпа, у него всплыло такое понятие.

А>Может кто-нить объяснить что это значит?

offtop, но... спасибо за своевременный вопрос. Оказывается, появилась такая штука, как boost::intrusive. Я как то даже расстроился — столько времени потрачено на велосипеды. Но появилась она, как выяснилось, только в последнем релизе. Да и гибкости (сравнительно) пока маловато. Хотелось бы переопределять размерность самих контейнеров — например, задавать комбинации хранимых данных head-tail-size для списков и т.п. Но само появление такого функционала весьма порадовало.
Re[2]: интрузивные/неинтрузивные контейнеры
От: jazzer Россия Skype: enerjazzer
Дата: 09.12.08 12:29
Оценка:
Здравствуйте, sokel, Вы писали:

Но появилась она, как выяснилось, только в последнем релизе.

Вообще-то она появилась в 1.35.0, а сейчас уже 1.37.0
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: интрузивные/неинтрузивные контейнеры
От: sokel Россия  
Дата: 09.12.08 13:22
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Вообще-то она появилась в 1.35.0, а сейчас уже 1.37.0


Извиняюсь, действительно в 35... я boost не пользуюсь, просто недоглядел, "new library" в boost version history означает не совсем то, что я подумал...

вот ещё по поводу гибкости: можно было бы для упорядоченных множеств сделать базовые контейнеры без фиксированной стратегии порядка, тогда стратегию можно было бы выбирать динамически, примерно так:

struct A : public set_base_hook<>
{
    int i;
    int j;
};

typedef member_order<A, int, &A::i> i_order;
typedef member_order<A, int, &A::j> j_order;

// тогда можно было бы делать так:
a_set.insert<i_order>(a);
// или так:
a_set.insert<j_order>(a);
// и даже так:
a_set.reorder<j_order>();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.