Daily bit(e) C++. Тегирование типов

Добавлено 24 сентября 2026 в 07:20

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

Daily bit(e) C++

Один из способов различить два вызова функций, которые в противном случае имели бы идентичные наборы типов аргументов, – это использование тегирования типов.

Этот прием особенно полезен для конструкторов, поскольку их нельзя переименовать.

#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);

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование