#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...
нет.