У меня есть этот код, который специализирует функцию печати для двух типов и возвращает обратно к базовой версии для любых других типов.
У меня вопрос, есть ли способ написать это без необходимости печатать отрицательный регистр для всех специализированных версий в enable_if базовой функции печати?
, т.е. есть ли способ удалить все !std::is_same
и при этом иметь однозначную функцию печати?
Любые версии C ++ приветствуются, но будет полезна та, которая работает в c ++ 14.
#include <iostream>
template<typename T, std::enable_if_t<!std::is_same<T, int>::value && !std::is_same<T, double>::value, int> = 42>
void print(T data)
{
std::cout << "base:" << data << std::endl;
}
template<typename T, std::enable_if_t<std::is_same<T, double>::value, int> = 42>
void print(T data)
{
std::cout << "double:" << data << std::endl;
}
template<typename T, std::enable_if_t<std::is_same<T, int>::value, int> = 42>
void print(T data)
{
std::cout << "int:" << data << std::endl;
}
int main()
{
std::string foo("foo");
double bar = 1.2;
int baz = 5;
print(foo);
print(bar);
print(baz);
}