c++ - 将类型名称用于 vector 迭代器 - C++11 示例

标签 c++

<分区>

Possible Duplicate:
Where and why do I have to put the “template” and “typename” keywords?

本文转自Stroustroup's FAQ .我见过当您不知道类型时使用的类型名称,例如在模板中,template <typename> class some_class .为什么在下面的示例中使用 typename?

    template<class T> void printall(const vector<T>& v)
    {
        for (auto p = v.begin(); p!=v.end(); ++p)
            cout << *p << "\n";
    }

In C++98, we'd have to write 

    template<class T> void printall(const vector<T>& v)
    {
        for (typename vector<T>::const_iterator p = v.begin(); p!=v.end(); ++p)
            cout << *p << "\n";
    }

最佳答案

你的例子就是典型的例子。自 vector<T>与模板化参数一起使用 T我们必须告诉编译器 ::const_iterator是一种类型。这是为了帮助编译器知道对于任何 T vector<T>类型有一个名为 const_iterator 的类型

关于c++ - 将类型名称用于 vector 迭代器 - C++11 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470718/

相关文章:

c++ - RAM 可以处理不同的数据类型大小吗?

c++ - 在 Mac 上检索 RAM 信息?

c++ - 重载 ‘max(char&, char&)’ 的调用不明确

c++ - (C++) 在没有递归的情况下实现指数函数求值器?

c++ - 我们什么时候使用 QMutexLocker 重新锁定和解锁?

c++ - C++中的内置环形计数器

c++ - 无法找出双重释放或损坏 (fasttop) 错误

C++ 继承初始化列表

c++ - VST GUI 反馈 (C++)

c++ - 显示扩展的 ASCII 字符