模板化类中的typedef typename

时间:2016-05-06 21:01:11

标签: c++ clang

我有这堂课:

template<Foo::Bar::EType ID,typename TYPE,int NBR>
class NumType            
{    
public:
    typedef TYPE                ElementType;
}

在另一个代码区域,我使用ElementType

class VectorType : public NumType<ID,TYPE,NBR>
{            
public:            
    typedef const ElementType* ValueType;
};

但我收到了错误:

  

错误3错误:未知类型名称'ElementType'

有谁知道为什么?

1 个答案:

答案 0 :(得分:3)

如果基类是依赖的,则在非限定名称查找期间不会搜索其范围。要解决此问题,请通过编写typename NumType<ID,TYPE,NBR>::ElementType而不是仅仅ElementType来明确命名基类,这使其成为一个依赖名称,并强制将其查找推迟到实例化时间,此时将找到它。

所需的类型也可以由typename VectorType::ElementTypetypename VectorType::NumType::ElementType命名,但这些代码的读者可能不太清楚。