GOOGLE ADS

пятница, 13 мая 2022 г.

Аргумент шаблона зависит от использования/объявления typedef

Как я могу написать using(или typedef) объявление, которое зависит от аргумента шаблона? Я хотел бы добиться чего-то вроде этого:

template<typename T>
class Class
{
// T can be an enum or an integral type
if constexpr (std::is_enum<T>::value) {
using Some_type = std::underlying_type_t<T>;
} else {
using Some_type = T;
}
};

Решение проблемы

Именно std::conditionalдля этого:

template <class T>
class Class
{
using Some_type = typename std::conditional_t<std::is_enum<T>::value, std::underlying_type<T>, std::type_identity<T>>::type;
};

std::type_identityиз С++ 20, который, если у вас его нет, легко воспроизвести самостоятельно:

template< class T >
struct type_identity {
using type = T;
};

Это необходимо, поскольку std::underlying_type<T>::typeне существует, если Tне является перечислением и std::conditionalне может предотвратить выполнение этой оценки.

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

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...