Writing your own type traits
In the previous recipe, we learned what type traits are, what traits the standard provides, and how they can be used for various purposes. In this recipe, we'll go a step further and take a look at how to define our own custom traits.
Getting ready
In this recipe, we will learn how to solve the following problem: we have several classes that support serialization. Without getting into any details, let's suppose some provide a "plain" serialization to a string (regardless of what that can mean), whereas others do it based on a specified encoding. The end goal is to create a single, uniform API for serializing the objects of any of these types. For this, we will consider the following two classes: foo
, which provides a simple serialization, and bar
, which provides serialization with encoding:
struct foo
{
std::string serialize()
{
return "plain"s;
}
};
struct bar
{
std::string serialize_with_encoding...