четверг, 22 июня 2023 г.

[prog.c++] Отличная статья для тех, кто хочет прокачать свое знание C++ных шаблонов

Вот: C++ template: Trying to Make the Easy Way. Букв много, но оно того стоит. Да к тому же там еще и ссылки на дополнительные материалы.

Совсем новичкам в C++ я бы ее рекомендовать не стал. Но если общие представления о шаблонах есть и хочется пойти дальше, то будет полезно. Да и бывалым C++никам имеет смысл ознакомиться. Я, например, для себя как минимум две вещи отметил:

Во-первых, вот такая форма SFINAE:

template <typename Object>
auto makeString(const Object& object) -> decltype(object.to_string())
{
    return object.to_string();
}

Я же, признаюсь, больше по старинке, через std::enable_if.

Во-вторых, необходимость применения std::forward в случаях, когда нужно вызвать какой-то метод у объекта, переданного посредством universal reference:

template <HasToString Object> // Это C++20, да. Не всем еще доступен.
std::string makeString(Object&& object)
{
    return std::forward<Object>(object).to_string();
}

В общем, мне понравилось. К прочтению рекомендую.

Комментариев нет: