Я играю с C ++ 17, и у меня есть std::tuple
из const &T
типов. Например:
template <typename... members>
auto make_cr_tuple(members const &...args) -> decltype(auto) {
return std::make_tuple(std::cref(args)...);
}
int main() {
std::string s;
int i = 0;
auto crt = make_cr_tuple(s, i); // std::tuple<const std::string &, const int &>
}
Мне нужен способ объявить кортеж каждого из типов значений, удалив квалификаторы const и reference. Например, может быть что-то вроде этого:
using decayed = decayed_tuple<decltype(crt)>::type
Я думаю, что мог бы использовать что-то вроде этого, но этого недостаточно.
template <typename T>
struct decayed_tuple {
using type = decltype(std::apply(std::make_tuple, T{}));
};
Очевидно, это не работает, потому что make_tuple
- это неразрешенная перегруженная функция.
На самом деле мне нужно std::make_tuple<???>
, но я не знаю, как получить типы из T
в пакет шаблонов. Обратите внимание, что я предполагаю, что T
здесь конструктивно по умолчанию.