yactl

Yet Another C++ Template Library

About

Yactl stand for "Yet Another C++ Template Library". As his name suggest, it is a template based C++ library, wich implement some well-know structure like typelist, tuple or generic pointers. The main idea is to provide common tools for other projects allowing then to share these tools between them, without providing useless ones or tools wich are project-specifics or platform-dependend.
This lib focus on This library will differ from some other ones (like boost for example) in that sense that it will only provide basic functionnality and nothing else. No chance too see other classes like threads, mathemical classes or parsing stuff being part of this lib. Anyway, they can always be developped on the base of this one.

Status

After spending some hours, I was quite happy with what I had. After spending some more hours, i've reached a point were pubic releases make sense. This is why the first public version was released. This one has been flag as an alpha release, since code haven't been tested a lot yet. But since, stuff has been still added, so now it already feature a lot more features than firstly tought i'll put in.

The first template classess were tuple, typelist, variant, and also generic (variables that can contain any type of data, correspond to boost::any). Then i add a class for static_arrays and some meta-classes (static_if for example). I will also say that i've taken some code from another of my projects, wich implement a counted_ptr classe. (wich is quite the same as shared_ptr). This is were the alpha release happened.

Since that, I've added a system in order to facilitate the verification of template's parameters type. Some bugs were fixed and some other classes were added. So, the first Beta release comes a good 2 month after alpha, and is the current one. This release has more stuff and is likelly to be used in projects.

Future

As said above, current version is the beta1. This version feature most of the stuff wich will be present in the first stable version, so you can already try it. From this point, no (or very few) changes in the interfaces of each class will be made, and the focus will be on debugging. Also and depending of the amount of time I'll have, I will perhaps optimize the code a little, but my first goal will be to write some docs. A second Beta release will probably follow, all that leading to the first stable 1.0 release.

For the future, there is already lots of structures i would like to add. The first I tought about are about pointers . I've got the idea of implementing more advanced and more specialized pointers. The main idea is to implement 3 classes: one for shared pointers, one for pointers wich belong to one object and only one (owned pointers?) and the last one for pointers wich can serve as unowned reference to an object. (Ideally, destroying an object from this kind of pointers would be made impossible). These pointers will hopefully be shipped in a 1.2 release. I'll also try to add some operations to the current set of classes, and also some classes wich are able to verify the type of their templates parameters.

For the 2.0 release, I will review the way I do template-based type checking in order to be more strict, and also begin to rewrite some part of the implementation using new C++0X feature. The idea is to have a C++0X-aware lib when this revision of the language will be available.

If you want, you can always have a look at my TODO List in order to have more details about what I'm going to do. Note that other stuf can always be added if some people (me and/or anybody else) want it, considering the fact that it must stay small, give basic functionnality and make some use of templates.