我有以下函数在另一个容器中创建std::vector
个迭代器:
template <typename T,
template <typename, typename = std::allocator<T>> class Con>
std::vector<typename Con<T>::iterator> make_itervec(Con<T>& v)
{
std::vector<typename Con<T>::iterator> itervec;
for (auto i = v.begin(); i != v.end(); ++i)
{
itervec.push_back(i);
}
return itervec;
}
我想做的是:
template <typename T,
template <typename, typename = std::allocator<T>> class Con>
auto make_itervec(Con<T>& v) -> decltype(x) // This line
{
std::vector<typename Con<T>::iterator> itervec;
for (auto i = v.begin(); i != v.end(); ++i)
{
itervec.push_back(i);
}
return itervec;
}
我为x
提供什么才能让它发挥作用?
尝试但尝试失败:
decltype(std::vector<typename Con<T>::iterator>)
decltype(std::vector<decltype(v)::iterator>)
(另外,我不是这方面的专家,所以任何其他建议,欢迎评论!谢谢。)
答案 0 :(得分:3)
我认为你在这里做了太多工作。您需要做的就是:
template <typename T>
std::vector<typename T::iterator> make_itervec(T& v)
{
std::vector<typename T::iterator> itervec;
for (auto i = v.begin(); i != v.end(); ++i)
{
itervec.push_back(i);
}
return itervec;
}
答案 1 :(得分:3)
您可以使用std::vector<decltype(v)::iterator>
或std::vector<decltype(v.begin())>
。请注意,decltype
周围有否 std::vector
,因为那个已经是类型,而不是变量或表达式。 decltype
仅用于获取表达式的类型。