🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на 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. Идиомы

Статический полиморфизм

Назначение

Идиома "Статический полиморфизм" основана на шаблонах, которые позволяют создавать обобщенные алгоритмы и контейнеры, которые могут работать с различными типами данных. Компилятор при использовании шаблона генерирует конкретный код для каждого типа данных, что позволяет избежать дублирования кода.

Решаемые задачи

  • уменьшение дублирования кода

  • возможность повторного использования кода

  • статическая проверка типов

Пример реализации идиомы "Статический полиморфизм"

template<typename T>
void sort_vector(std::vector<T>& v) 
{
    for (int i = 0; i < v.size(); i++) 
        for (int j = i + 1; j < v.size(); j++) 
            if (v[i] > v[j]) 
            {
                T temp = v[i];
                v[i] = v[j];
                v[j] = temp;
            }          
}
int main() 
{
    std::vector<int> v1 = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    std::vector<std::string> v2 = { "apple", "banana", "cherry", "date", "elderberry" };
    sort_integers(v1);
    sort_strings(v2);
    return 0;
}

Недостатки использования

  • необходимость явного указания типа данных при использовании шаблонов, что приводит к усложнению кода и затруднении чтения и поддержки

  • шаблоны могут занимать большой объем памяти, если используются для хранения больших объемов данных

  • не подходит для задач, которые требуют динамического выбора данных во время выполнения программы

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

PreviousCRTPNextShrink to fit

Last updated 1 year ago

Was this helpful?