🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page

Was this helpful?

  1. Идиомы
  2. Type erasure

Контейнеры с type erasure

std::any - контейнер, который может хранить объекты разных типов данных

int main() 
{
    std::any a = 42;
    std::cout << std::any_cast<int>(a) << std::endl;
    a = 3.14;
    std::cout << std::any_cast<double>(a) << std::endl;
    a = std::string("Hello, World!");
    std::cout << std::any_cast<std::string>(a) << std::endl;
    return 0;
}

std::variant - может хранить объекты только заданных типов данных

int main() 
{
    std::variant<int, double, std::string> v;
    v = 42;
    std::cout << std::get<int>(v) << std::endl;
    v = 3.14;
    std::cout << std::get<double>(v) << std::endl;
    v = std::string("Hello, World!");
    std::cout << std::get<std::string>(v) << std::endl;
    return 0;
}

std::function - объект функции, который может хранить функции разных типов данных

void call_function(const std::function<void ()>& func) 
{
    std::cout << "Calling function... ";
    func();
}
void print_hello() 
{
    std::cout << "Hello, ";
}
void print_world() 
{
    std::cout << "world!" << std::endl;
}
int main() 
{
    std::function<void ()> f1 = print_hello;
    std::function<void ()> f2 = print_world;
    call_function(f1);
    call_function(f2);
    return 0;
}
PreviousType erasureNextCRTP

Last updated 1 year ago

Was this helpful?