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
library.
Character Traits
One of the most commonly used trait and policy templates is char_traits<> in the <string> header. The standard declares
two specializations: char_traits<char> and char_traits<wchar_t>.
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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access