-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Личные определения шаблона
Идея призвана сократить количество кода при многократном упоминании шаблонов с параметрами в определении какого-либо шаблона, а также улучшить его читаемость. Эти вычисляемые на этапе компиляции определения (как типы, так и constexpr-выражения) предлагается помещать в фигурных скобках сразу после закрывающей угловой скобки параметров шаблона.
Как сейчас:
template <typename T>
constexpr
std::enable_if_t
<
my_ns::meta<T>::is( my_ns::meta<T>::Array ),
typename my_ns::array<typename my_ns::meta<T>::ref::type::orig, my_ns::meta<T>::dimension()>
>
make_array ( T & src ) noexcept
{
return my_ns::array<typename my_ns::meta<T>::ref::type::orig, my_ns::meta<T>::dimension()>( src );
}
где:
my_ns - некое пространство имён;
my_ns::meta<T> - шаблон дедукции параметров типа;
остальное более-менее интуитивно понятно (надеюсь).
Как предлагается:
template <typename T>
{
using meta = my_ns::meta<T>;
typedef
std::enable_if_t<meta::is( meta::Array ), typename my_ns::array<typename meta::ref::type::orig, meta::dimension()>>
array;
}
constexpr
array make_array ( T & src ) noexcept
{
return array( src );
}
Как видно из примера, в предлагаемом варианте улучшается восприятие кода при использовании SFINAE.
Бонусом можно добавить общие для всех специализаций личные определения шаблона в его опережающем объявлении.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels