специализация is_floating_point для пользовательского типа

#c #c 17

#c #c 17

Вопрос:

Могу ли я определить is_floating_point для пользовательского класса? Я пробовал это. Но is_floating_point возвращает false .

 class Test
{
  public:
  Test() { x = 0; }
  private:
    float x;
};

template<>
struct is_floating_point<Test>
{
  static constexpr bool value = true;
};

void main()
{
   std::cout<<std::is_floating_point<Test>::value<<endl;
}
 

Комментарии:

1. Создайте свой собственный is_floating_point , который допускает обычные плавающие точки и ваши собственные.

Ответ №1:

Номер std::is_floating_point<T> определяется как возвращающий true, когда «T — тип с плавающей запятой», а затем в стандарте указывается, что «Существует три типа с плавающей запятой: float , double , и long double .

Не оставляет места для маневра.

Комментарии:

1. cppreference также проясняет это: » Поведение программы, которая добавляет специализации для is_floating_point (или is_floating_point_v ), не определено».