Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Универсальные шаблоны – они же generics
официальный русский перевод слова generics
Данная статья переведена автоматически. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
#include <type_traits>
#include <iostream>
#include <string>
struct NonPod { virtual ~NonPod() {} };
struct Pod {};
struct classifier
{
template<class T>
static std::string classify(T &&rr, ...)
{
return "Classified as non POD";
}
template<class T>
static std::string classify(T &&rr, typename std::enable_if<std::is_pod<T>::value>::type * = 0)
{
return "Classified as POD";
}
};
void main()
{
std::cout << classifier::classify(NonPod()) << std::endl; // prints "Classified as non POD"
std::cout << classifier::classify(Pod()) << std::endl; // prints "Classified as POD"
}
ICollidable asteroid = new Asteroid();
ICollidable spaceship = new Spaceship();
The art of Generics