什么时候需要“type Name”关键字?

什么时候需要“type Name”关键字?

考虑以下守则:

template<class K>class C {
    struct P {};
    vector<P> vec;
    void f();};template<class K> void C<K>::f() {
    typename vector<P>::iterator p = vec.begin();}

为什么在这个例子中“type Name”关键字是必需的?是否还有其他必须指定“type Name”的情况?


元芳怎么了
浏览 492回答 3
3回答

ABOUTYOU

这个typename关键字,因为iterator上的依赖类型。P..编译器无法猜测iterator指一个值或一个类型,所以它假定它是一个值,除非你大喊大叫。typename..在任何类型或值都是有效的上下文中,只要存在依赖于模板参数的类型,就需要使用它。例如,作为基类typename不需要,因为基类必须是类型。在同一主题上,有一个template关键字,用于让编译器知道某些依赖的名称是一个模板函数,而不是一个值。
打开App,查看更多内容
随时随地看视频慕课网APP