scl-utility

overload_cast

Утилита для разрешения неоднозначности перегруженных функций и функций-членов по типам аргументов.

Содержание:


overload_cast<Args...>

Выбирает конкретную перегрузку указателя на функцию или функцию-член на основе типов аргументов.

Семантика

Мотивация

Взятие адреса перегруженной функции обычно требует многословного static_cast к точному типу указателя на функцию. overload_cast предоставляет лаконичную и читаемую альтернативу:

// Без overload_cast — многословно и подвержено ошибкам
auto p = static_cast<void (Widget::*)(int)>(&Widget::update);

// С overload_cast — лаконично и понятно
auto p = scl::overload_cast<int>(&Widget::update);

Примеры

#include <scl/utility/type_traits/overload_cast.h>

struct Widget {
    void update(int);
    void update(double) const;
    void update(int, int) noexcept;
};

void process(int);
void process(double) noexcept;

// Перегрузки функций-членов
auto p1 = scl::overload_cast<int>(&Widget::update);          // void(int)
auto p2 = scl::overload_cast<double>(&Widget::update);       // void(double) const
auto p3 = scl::overload_cast<int, int>(&Widget::update);     // void(int, int) noexcept

// Перегрузки свободных функций
auto f1 = scl::overload_cast<int>(&process);                 // void(int)
auto f2 = scl::overload_cast<double>(&process);              // void(double) noexcept

Типичные сценарии использования