...

/

Customize a String Class With char_traits

Customize a String Class With char_traits

Learn to customize a string class with char_traits.

We'll cover the following...

The string class is an alias of the basic_string class, with the signature:

class basic_string<char, std::char_traits<char>>;

The first template parameter provides the type of character. The second template parameter provides a character traits class, which provides basic character and string operations for the specified character type. We normally use the default char_traits<char> class.

We can modify the behavior of a string by providing our own custom character traits class.

How to do it

In this recipe, we will create a character traits class for use with basic_string that will ignore casing for comparison purposes:

  • First, we'll need a function to convert characters to a common case. We'll use lowercase here, but it's an arbitrary choice. Uppercase would work just as well:

constexpr char char_lower(const char& c) {
if(c >= 'A' && c <= 'Z') return c + ('a' - 'A');
else return c;
}

This function must be constexpr (for C++20 and later), so the existing std::tolower() function won't work here. Fortunately, it's a simple solution to a simple problem.

    ...