Можно ли работать с отдельными типами в шаблоне?
Собственно, есть две функции и шаблон для ввода-вывода данных. Можно ли работать с отдельными типами данных в шаблоне? Например, чтобы проверить, что числа лежат в определенном диапазоне. Возможно, что у меня в коде что-то неправильно, т.к. изучаю С++ недавно и многого не знаю. И вообще, можно ли шаблон по-другому написать?
#include <iostream>;
#include <clocale>;
using namespace std;
#include <cstring>;
#include <cmath>;
void func(char* s1, char* s2);
unsigned char func(unsigned char x, unsigned char y);
template <typename T>
auto input()
{
T x1;
T x2;
cout << "Введите данные: " << endl;
cin >> x1 >> x2;
return func(x1, x2);
}
int main()
{
setlocale(LC_ALL, "Russian");
input<char[256]>();
auto y = input<int>();
cout << "y: " << int(y) << endl;
return 0;
}
//Функция определяет входит ли подстрока в строку
void func(char* s1, char* s2) {
if (strlen(s1) < strlen(s2)) {
swap(s1, s2);
}
if (strstr(s1, s2) != 0) {
cout << "Подстрока входит" << endl;
}
else {
cout << "Подстрока не входит" << endl;
}
}
//Функция для поиска модуля вектора
unsigned char func(unsigned char x, unsigned char y) {
return sqrt(x * x + y * y);
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Вам нужен либо SFINAE и специализация шаблона под конкретный тип/типы, либо, если у Вас с++17 - if constexpr
То есть, можно написать так
template <typename T>
auto input()
{
T x1;
T x2;
if constexpr (is_floating_point_v<T>) {
std::cout << "хотят fload или double";
}
cout << "Введите данные: " << endl;
cin >> x1 >> x2;
return func(x1, x2);
}