Reputation: 6452
I would like to write a container class in a style which fits very neatly into STL. It should look and behave as if it where a standard STL container.
Is there a manual, report, Q&A, etc., out there that describes how to write code with these set of features? Such a text should compromise design principles of the STL, pitfalls, coding conventions, and the like.
PS: This question has been partly inspired by that one: C++ vector with dynamic item size although that idea is not about template classes.
Upvotes: 19
Views: 1894
Reputation: 4900
Besides the one recommended by user763305, I would also look at Austern, Generic Programmming and the STL: Using and Extending the C++ Standard Template Library. It discusses these sorts of issues and serves as a good reference for the concepts in STL.
Upvotes: 1
Reputation: 21367
I'd recommending reading Josuttis, The C++ Standard Library: A Tutorial and Reference. It gives clear and easy to read explanations of the principles behind STL.
Upvotes: 4
Reputation: 35178
I recommend reading Herb Sutter's "Unstrung". It's an in-depth look at std::string
, covering what went right and what could've been done better. I highly value his opinion on C++ programming matters. It's a long read, but I guarantee you'll learn a few useful things about writing classes in the style of the C++ standard library (and about writing classes in general).
You could also take a look at Scott Meyers' Effective STL. That book will give you a good overview of the expectations levied on the users of standard library containers. Having that insight will help you write better container classes yourself.
Upvotes: 7
Reputation: 9315
It is not very difficult (for simple data stuctures). You should read the chapter about containers in the C++ standard. You can download the draft of the upcoming C++1x standard here :
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/#mailing2011-04
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf
You might want to use boost::iterateror_facade when writing the iterators.
http://www.boost.org/doc/libs/1_46_1/libs/iterator/doc/iterator_facade.html
Upvotes: 8