Написать C++ контейнер, который аккуратно вписывается в STL
Я хотел бы написать контейнерный класс в стиле, который очень аккуратно вписывается в STL. Он должен выглядеть и вести себя так, как будто это стандартный контейнер STL.
Существует ли руководство, отчет, вопросы и ответы и т. Д., Где описывается, как написать код с этим набором функций? Такой текст должен ставить под угрозу принципы проектирования STL, подводные камни, соглашения о кодировании и тому подобное.
PS: Этот вопрос был частично вдохновлен тем: вектор C++ с динамическим размером элемента, хотя эта идея не о шаблонных классах.
4 ответа
Это не очень сложно (для простых структур данных). Вам следует прочитать главу о контейнерах в стандарте C++. Вы можете скачать черновую версию стандарта C++1x здесь:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf
Возможно, вы захотите использовать boost::iterateror_facade при написании итераторов.
http://www.boost.org/doc/libs/1_46_1/libs/iterator/doc/iterator_facade.html
Я рекомендую прочитать "Unstrung" Херба Саттера. Это углубленный взгляд на std::string
, охватывающий то, что прошло правильно и что могло быть сделано лучше. Я высоко ценю его мнение по вопросам программирования на C++. Это долгое чтение, но я гарантирую, что вы узнаете несколько полезных вещей о написании классов в стиле стандартной библиотеки C++ (и о написании классов в целом).
Вы также можете взглянуть на " Эффективный STL" Скотта Мейерса. Эта книга даст вам хороший обзор ожиданий, которые возлагаются на пользователей стандартных контейнеров библиотеки. Понимание этого поможет вам лучше писать классы контейнеров.
Я бы порекомендовал прочитать Josuttis, Стандартная библиотека C++: Учебное пособие и Справочник. Это дает четкие и простые для понимания объяснения принципов, лежащих в основе STL.
Помимо того, что рекомендовано user763305, я бы также рассмотрел Austern, Generic Programming и STL: использование и расширение стандартной библиотеки шаблонов C++. В нем обсуждаются вопросы такого рода, и он служит хорошим ориентиром для концепций в STL.