Traits and Policies
Traits are used throughout the C++ library. A trait is a class or class template that characterizes a type, possibly a template parameter. At first glance, it seems that traits obscure information, hiding types and other declarations in a morass of templates. This is true, but traits are also powerful tools used in writing templates. Traits are often used to obtain information from built-in types in the same manner as user-defined types.
A policy is a class or class template that defines an interface as a service to other classes. Traits define type interfaces, and policies define function interfaces, so they are closely related. Sometimes, a single class template implements traits and policies.
The typical application programmer might never use traits and
policies directly. Indirectly, however, they are used in the
string class, I/O streams, the standard
containers, and iterators—just about everywhere in the standard
One of the most commonly used trait and policy templates is
char_traits<> in the
<string> header. The standard declares
The rest of the C++ library uses character traits to obtain
types and functions for working with characters. For example, the
basic_istream class template takes
a character type,
charT, and a
character traits type as template parameters. The default value for
the traits parameter is
char_traits<charT>, which is a set of character traits defined ...