Как проверить является ли шаблонный параметр класса числом с плавающей точкой c++17?
Как проверить является ли шаблонный параметр класса числом с плавающей точкой c++17?
К примеру, есть класс
template<typename T>
class Test
{
};
как проверить на этапе компиляции что T является double или float ?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Если компилятор концепты не понимает, то, например, так:
template<typename T, typename = std::enable_if_t<std::is_floating_point_v<T>>>
Можно также воткнуть в код
static_assert(is_floating_point<T>::value);
или
static_assert(is_floating_point_v<T>);
А если понимает -
typename<floating_point T>
или
template<typename T> requires floating_point<T>
должно хватить.
Ну, а если нужен разный код для разных типов, то можно использовать if constexpr - типа такого
template<typename T>
class X
{
public:
X() {
if constexpr (is_floating_point_v<T>)
{
cout << "Yes\n";
}
else
{
cout << "No\n";
}
}
};
int main()
{
X<int> t;
X<double> z;
}