Daily bit(e) C++. Тегирование типов
Добавлено 24 сентября 2026 в 07:20
Daily bit(e) C++ 120, различение перегрузок функций с помощью тегирования типов.

Один из способов различить два вызова функций, которые в противном случае имели бы идентичные наборы типов аргументов, – это использование тегирования типов.
Этот прием особенно полезен для конструкторов, поскольку их нельзя переименовать.
#include <string_view>
// Теги
struct IPv4_t{};
struct IPv6_t{};
// Экземпляры тегов
constexpr inline IPv4_t IPv4 = {};
constexpr inline IPv6_t IPv6 = {};
struct IPAddr
{
// Первый аргумент - это тег для различения перегрузок
IPAddr(IPv4_t, std::string_view addr, int port) {}
IPAddr(IPv6_t, std::string_view addr, int port) {}
};
// Вызов тегированных функций
IPAddr addr1(IPv4, "127.0.0.1", 80);
IPAddr addr2(IPv6, "::1", 80);
