June From The Pages Columns

The Russian Peasant Algorithm

Matt Austern
The most striking attribute of the C++ Standard Library is that so much of it is a generic library. In this month's column, Austern writes a generic implementation of the Russian peasant algorithm, analyzes the implementation to discover what requirements that type has to satisfy for the algorithm to make sense, and codifies those requirements as a list of syntactic and semantic expressions involving SemigroupElement.

Traits on Steroids
Andrei Alexandrescu
Traits are useful, but when do you need their unusual flexibility? How can you avoid the drudgery of manually traits-enabling reams of classes in existing hierarchies? This article answers these questions in the context of SmartPtr, and introduces hierarchy-wide traits, a new technique that allows you to define traits for entire hierarchies in a single shot.

Extern "C" and Templates

Josée Lajoie and Stanley Lippman
In a previous column, Lajoie and Lippman explained how extern "C" linkage specifications influence function types in C++. This month, they answer questions about the effects of extern "C" on different aspects of a template's definition.

To Code or Not to Code, Part 2

John Vlissides and Andrei Alexandrescu
Generic Pattern Implementations (GPIs) aren't patterns themselves; they're implementations of patterns. GPI offers a way of expressing design pattern implementations a bit more succinctly and explicitly than bare C++. Vlissides and Alexandrescu discuss this crucial property as well as typelist operations and actions, template parameters as design choices, and inheritance versus templates.

XP: A Lightweight Instance of RUP

Robert Martin
Extreme Programming (XP) is an explicit, lightweight, highly productive software development process for small teams. The Rational Unified Process (RUP) is a software development process framework. It describes some of the most important features necessary in an explicit process, but is not, in itself, explicit. This article shows that XP is an extremely lightweight instance of RUP.

A More Refined Method for Implementing Manipulators with Parameters

Klaus Kreft and Angelika Langer
In their last column, Kreft and Langer explored manipulators with parameters, presenting a simple, straightforward implementation technique. This time, they refine this technique by factoring out the functionality common to all manipulators with parameters, and explain the solution chosen for the standard manipulators in IOStreams.