Как посмотреть выведенный тип у вариативных шаблонов?
Имеется такая функция. Каким образом с помощью decltype или std::decay_t можно узнать тип параметра и использовать его в конструкции if constexpr например? Благодарю.
template<typename ...T>
bool implic(T... args) {
return(args | ...);
}
Ответы (2 шт):
Автор решения: AR Hovsepyan
→ Ссылка
template<typename ...T>
bool implic(T... args) {
if constexpr (!(std::is_integral_v<decltype(args)> && ...))
return false;
else
return(args | ...);
}
Такой пример подойдет?
Автор решения: user7860670
→ Ссылка
Чтобы узнать тип параметра его необходимо извлечь из пачки параметров T. Для этого можно воспользоваться кортежами из стандартной библиотеки:
#include <tuple>
#include <type_traits>
#include <cstddef>
template< typename ... T >
bool implic(T ... args)
{
if constexpr
(
::std::is_same_v
<
::std::tuple_element_t< ::std::size_t{2}, ::std::tuple< T ... > >
, int
>
)
{
// параметр с индексом 2 имеет тип int...
}
return (args | ...);
}