хайюжъки!
есть некоторые типы, наследники такого интерфейса:
struct processor {
virtual void process(const void *ptr, const std::size_t size) = 0;
};
реализации наследников юзер добавляет в некоторый класс посредством метода
void reg(const std::uint32_t proc_id, std::unique_ptr<processor> p) {...}
далее, в этом классе есть метод
void process(const std::uint32_t proc_id, const void *ptr, const std::size_t size) {...}
тут,
proc_id служит для идентификации объекта-реализации типа
processor. т.е. напрашивается вывод о том, что эти объекты логично хранить в каком-либо ассоциативном контейнере. но загвоздка в том, что деструктится эти объекты должны в порядке обратном от того, в котором добавлялись.
т.е.
std::map<> отпадает из-за того, что он сортирует по ключу, а
std::unordered_map<> отпадает из-за того, что порядок не определен.
таким образом, решение вижу в использовании двух контейнеров. к примеру, для хранения использовать
std::list<std::unique_ptr<processor>>, и после вставки элемента, передавать его итератор в
std::unordered_map<std::uint32_t, list_iterator>.
какие еще мысли?
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)