Вывод пакета параметров из определенного элемента всех элементов пакета

#c 11 #variadic-templates

#c 11 #переменные-шаблоны

Вопрос:

Я предполагаю, что это довольно просто, просто не могу понять, как это сделать — Предполагая, что каждый тип, передаваемый в качестве параметра, имеет элемент typedef с именем ‘t’, как я мог бы создать из кортежа элемента?

 #include <tuple>

template <typename T>
struct A{
  typedef T t;
};

template <typename ...Ts>
struct B{
  std::tuple<Ts::t...> ts; // I want a tuple of Ts::t type...
};

int main()
{
  B<A<int>,A<float>> b;
  return 0;
}
  

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

1. попробуйте typename Ts::t... вместо Ts::t... .

2. Это сработало. Спасибо!

Ответ №1:

Параметры шаблона класса std::tuple являются типами.

Ts::t является dependent name .

Чтобы объявить, что зависимое имя является типом, вы должны использовать typename ключевое слово перед ним.

Теперь вы знаете, почему typename Ts::t... работает, а Ts::t... нет.