Читаю страуструпа, у него всплыло такое понятие.
Может кто-нить объяснить что это значит?
Re: интрузивные/неинтрузивные контейнеры
От:
Аноним
Дата:
08.12.08 13:33
Оценка:
А>Читаю страуструпа, у него всплыло такое понятие. А>Может кто-нить объяснить что это значит?
Интрузивный контейнер — это контейнер который требует каких либо изменений кода класса, чтобы он мог быть в него помещен.
Re[2]: интрузивные/неинтрузивные контейнеры
От:
Аноним
Дата:
08.12.08 13:37
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>Читаю страуструпа, у него всплыло такое понятие. А>>Может кто-нить объяснить что это значит? А>Интрузивный контейнер — это контейнер который требует каких либо изменений кода класса, чтобы он мог быть в него помещен.
Т.е., допустим, контейнер принимающий объекты наследованные от какого-то общего класса.
Здравствуйте, Аноним, Вы писали:
А>Читаю страуструпа, у него всплыло такое понятие. А>Может кто-нить объяснить что это значит?
offtop, но... спасибо за своевременный вопрос. Оказывается, появилась такая штука, как boost::intrusive. Я как то даже расстроился — столько времени потрачено на велосипеды. Но появилась она, как выяснилось, только в последнем релизе. Да и гибкости (сравнительно) пока маловато. Хотелось бы переопределять размерность самих контейнеров — например, задавать комбинации хранимых данных head-tail-size для списков и т.п. Но само появление такого функционала весьма порадовало.
Здравствуйте, 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>();