迭代器的decltype作为模板参数

时间:2017-07-13 08:17:41

标签: c++ c++11

以下是复制我的问题的简化代码:

工作代码:

int main(int argc, char **argv)
{
    std::vector<int> x;
    std::map<char, std::vector<int>::size_type> y;
    y[0]=x.size();
    return 0;
}

无效代码(使用decltype):

int main(int argc, char **argv)
{
    std::vector<int> x;
    //std::map<char, std::vector<int>::size_type> y;
    std::map<char, decltype(x.begin())> y;
    y[0]=x.size();
    return 0;
}

代码无法编译,并出现以下错误:

错误:'operator ='不匹配(操作数类型为'std :: map&gt;&gt; :: mapped_type {aka __gnu_cxx :: __ normal_iterator&gt;}'和'std :: vector :: size_type {aka long unsigned int}')      Y [0] = x.size();

decltype(x.begin())不应该等同于std::vector<int>::size_type吗?

1 个答案:

答案 0 :(得分:3)

  

不应该decltype(x.begin())等同于std::vector<int>::size_type吗?

不,std::vector::begin返回std::vector<T>::iterator

我想你想要的是decltype(x.size())