У меня есть простой класс Vec3<T>
, и я хотел бы обновить его, используя концепции C ++ 20 (Clang 10.0.0 с -std = c ++ 20). Новая версия выглядит примерно так:
template <typename T> concept Arithmetic = std::is_arithmetic_v<T>;
template <typename T> concept FloatingPoint = std::is_floating_point_v<T>;
template <Arithmetic T> struct Vec3 {
T x, y, z;
/* operator overloading, etc.. */
void normalize() requires FloatingPoint<T>;
};
Это правильное использование концепций C ++ 20? основное руководство T11 рекомендует использовать стандартные концепции как как можно больше, но я не смог найти те, которые хотел, в списке именованных требований C ++, ни в заголовочном файле <concepts>
. Это потому, что мои концепции слишком специфичны и вообще не должны быть концепциями?
В моем исходном коде для достижения конечного результата используется сочетание static_assert
и SFINAE.
std::floating_point
- person Evg   schedule 04.07.2020std::is_floating_point
получил свою концепцию, а неstd::is_arithmetic
? - person Touloudou   schedule 04.07.2020normalize()
бесплатной функцией с параметромVec3<T>&
. - person Evg   schedule 04.07.2020