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



我正在编写这样的函数模板:

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);

但显然这是不允许的。我应该如何编写模板来实现我的目标?

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

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

另一种方式是STL容器(包括std::vectorstd::list(的成员类型为value_type,可以将其用作

template <typename A>
auto func(A& data) {
using B = typename A::value_type;
// ... use B as the data type ...
}

这应该有效:

template <class T>
class MyClass {};
template <template <typename, typename...> typename A, typename B, typename ... REST>
auto func(A<B,REST...>& data) {
return MyClass<B>();
}

最新更新