IDma88
@IDma88
Программист C++

Как ограничить допустимые типы при описании шаблона типа в C++?

Имеется некоторый класс (Float2) с конструктором., который принимает несколько параметров. Например: void Float2(float x, float y);
Далее возникла потребность принимать в качестве аргументов другие типы данных.
Можно было бы использовать шаблон template <typename T>, но требуется ограничить типы - в моём случае только float и string.
Да, можно написать как то так
void Float2(float x, float y);
void Float2(float x, string y);
void Float2(string x, float y);
void Float2(string x, string y);

Однако, о помимо такого класса, есть ещё и аналогичный с 4-мя аргументами, а это уже 16 вариаций конструкторов. Так дело не пойдёт.
Вопрос: возможно ли описать шаблон типа так, чтобы он был ограничен только типами float и string, а сам конструктор сводился к виду void Float2(T x, T y); или чему-то подобному
  • Вопрос задан
  • 1017 просмотров
Решения вопроса 2
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Начиная с C++17, можно использовать constexpr if в шаблонах: en.cppreference.com/w/cpp/language/if . В самом условии что-то вроде en.cppreference.com/w/cpp/types/is_same, ну и выдавать ошибку компиляции, если типы не соотвествуют. Правда правила вам всё равно руками придётся прописывать или почитать advanced template metaprogramming.
Есть ещё вариант c boost::mpl, например использовать mpl::vector.
Ответ написан
Комментировать
IDma88
@IDma88 Автор вопроса
Программист C++
Вариант, который предложил Adamos в комментариях, для меня оказался именно тем, что я искал. По крайней мере удалось реализовать задуманное
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы