Save the planet. Save the trees. Save your data, man.
Project powered by:


Various C++ papers written by s11n's author.

As one might guess by looking at the size of s11n's documentation and it's web site, i like to write. i admit it: i'm one of those rare programmers who gets a signicant amount of joy out of writing documentation (gasp!).

This page hosts several papers i have written during the development of the libraries available on this site. These papers are not specifically geared towards this project, but cover topics which are generally applicable to many 21st-century C++ projects. Library-specific manuals and API documentation can be found on the downloads page.

This all really goes without saying, but i'll say it anyway:

Any and all constructive feedback on these papers is very happily received. Blatantly derogatory mails (i.e., "flames mails") are not. Useful feedback will be published in future, updated revisions of these papers, of course with full credit going to those who provide suggestions. Also, please send a mail if you would like to be notified of updated or new papers.

If you happen to re-distribute any of these papers, or get any use whatsoever out of them, i would be absolutely flattered if you would tell me so.

(While i have only heard from a couple of people, the web logs for 14 June - 17 August, 2004 record more than 400(!!!) downloads for these papers (not including googlebots), so i'm assuming that someone is reading them! If you want your feedback in any updated versions, let me know what you think about them!)

Fair warnings to potential readers:
  • The PDF-format versions of these papers look absolutely horrible in Adobe Acrobat, but look fine in all Linux-based PDF readers (except acroread, that is). Windows users are encouraged to download the HTML versions, as are non-Windows users who do not have access to an Open Source PDF viewer like gv or kghostview (gv is installed on almost all Linux boxes, by the way).
  • i am not a C++ guru. i can get by with the language, but i'm always learning new things about it (often things which surprise me!). Thus these papers may contain some factual errors about C++. If the reader notices any, i would ask that he please gently prod me along in the proper direction...
  • All of these papers are released into the Public Domain, and of course carry No Warranties of any type.

Context Singletons

Doc last updated: 14 June 2004

This is a paper discussing the use of what i call Context Singletons, written during the development of class_loader 0.5.0. It also develops a non-intrusive, light-weight Phoenix Singleton class.

Download: pdf html

"Context Singleton" is a bit of a misnomer: this paper probably should have been called "Context Monostates", or something similar.

The latest source code for the phoenix class developed in this paper is available on the downloads page, and it is worth noting that phoenix is used extensively in the s11n tree. More information about using phoenix can be found here.

Context Types

Doc last updated: 14 June 2004

Like the Context Singletons paper, this one discusses the idea of using types as contexts in C++. It is a gentler introduction to the topic as given in the Context Singletons paper, and is more generic.

Download: pdf html


Doc last updated: 22 August 2004

"Supermacros" are a technique the s11n project uses to get at the code generation possibilities implied by traditional C++ macros, while eliminating some of their more notorious problems. This short paper gives an overview of what they are, how they can be used, and their advantages (and one tiny disadvantage) over classic macros.

Download: pdf html

Lexical casting

Doc last updated: 14 Aug 2005

This paper covers the topic of "lexical casting." That is, the conversion of non-string data to and from strings. Loosely-typed languages (e.g., Perl and PHP) inherently support this, but strongly-typed languages (e.g., C++) do not have such a feature built-in. This paper develops a class which generically adds this capability to C++ software.

The source code for the lex_t class developed in this paper can be found on the downloads page.

Download: pdf html

Classloading in C++: bringing it into the 21st century

Doc last updated: 3 Jan 2005

This paper addresses the topic of classloading in C++, and presents a generic back-end for adding such support to arbitrary classes and applications. It is modelled after the code in the class_loader library, but is a more generic treatment of the topic.

Download: pdf html

Generic Cleanup in C++

Doc last updated: 14 Aug 2005

This paper develops an alternate approach to smart pointers for guaranteeing proper cleanup of unmanaged pointers in the face of errors. This approach is used in libs11n 1.1.3+ to provide leak-safety guarantees which it otherwise could not make.

Download: pdf html
Download the source code, including Makefile, test program, and doxygen file for generating API docs.