Write C++ container that fits neatly into STL

2019-02-02 07:00发布

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.

4条回答
叛逆
2楼-- · 2019-02-02 07:14

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.

查看更多
手持菜刀,她持情操
3楼-- · 2019-02-02 07:17

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.

查看更多
Viruses.
4楼-- · 2019-02-02 07:26

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.

查看更多
孤傲高冷的网名
5楼-- · 2019-02-02 07:27

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

查看更多
登录 后发表回答