繁体   English   中英

在这种情况下,放入 decltype(x) 以指定返回类型的语法是什么

[英]What would be the syntax to put into decltype(x) to specify the return type in this situation

我有以下 function,它将迭代器的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>)

(此外,我不是这方面的专家,所以欢迎任何其他建议和评论。谢谢。)

我认为你在这里做了太多工作。 您需要做的就是:

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

您可以使用std::vector<decltype(v)::iterator>std::vector<decltype(v.begin())> 请注意, std::vector周围没有decltype ,因为它已经是一种类型,而不是变量或表达式。 decltype仅用于获取表达式的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM