C++ 如何使用模板获取向量中的数据类型?

C++ 如何使用模板获取向量中的数据类型?,c++,templates,stl,C++,Templates,Stl,我正在编写一个函数模板,如下所示: template <class T> class MyClass() {} template <typename A, typename B> auto func(A<B>& data) { return MyClass<B>(); } vector<int> vi; auto a = func(vi); vector<string> vs; auto b

我正在编写一个函数模板,如下所示:

template <class T>
class MyClass() {}

template <typename A, typename B>
auto func(A<B>& data) {
    return MyClass<B>();
}
vector<int> vi;    auto a = func(vi);
vector<string> vs;    auto b = func(vs);
list<int> li;    auto c = func(li);
list<string> ls;    auto d = func(ls);
模板
类MyClass(){}
模板
自动功能(A和数据){
返回MyClass();
}
因此,我可以使用如下函数:

template <class T>
class MyClass() {}

template <typename A, typename B>
auto func(A<B>& data) {
    return MyClass<B>();
}
vector<int> vi;    auto a = func(vi);
vector<string> vs;    auto b = func(vs);
list<int> li;    auto c = func(li);
list<string> ls;    auto d = func(ls);
向量vi;自动a=func(vi); 向量vs;自动b=功能(vs); 李名单;自动c=func(li); 列表ls;自动d=func(ls); 但显然这是不允许的。我应该如何编写模板以达到我的目标?

这应该可以:

template <class T>
class MyClass {};

template <template <typename, typename...> typename A, typename B, typename ... REST>
auto func(A<B,REST...>& data) {
    return MyClass<B>();
}
模板
类MyClass{};
模板
自动功能(A和数据){
返回MyClass();
}

您可以将
A
声明为,否则不能在函数参数声明中将其用作
A
,因为它不被视为模板

template <template <typename...> class A, typename B>
auto func(A<B>& data) {
    // ... use B as the data type ...
}