Вот: 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();
}
В общем, мне понравилось. К прочтению рекомендую.
Комментариев нет:
Отправить комментарий