模板函数需要在非模板化类中存在内部类

时间:2017-01-25 00:07:43

标签: c++ templates nested definition

模板函数 f 要求其模板参数类型 T 具有名为 Inner 的内部类。

f 内部, T :: Inner 将被实例化。

首先尝试。

//
// "error: need 'typename' before 'T:: Inner' because 'T' is a dependent scope"   
// 
template <typename T>
void f( void )
{        
    T::Inner i;
}

我知道了,所以这是第二次尝试,我没有弄错:

/// "error: expected ';' before 'i'
template<typename T> 
void f ( void )
{                        
    typename T::Inner I;
    I i;
}

为什么?

根据我的理解: 内部被声明为类型。 该模板尚未实例化。 是否存在类型 Inner 首先变得相关 在实例化 - 不是定义。我哪里错了?

1 个答案:

答案 0 :(得分:2)

我想你想做

typename T::Inner i;

typedef typename T::Inner I;
I i;

而你在问题中的内容实际上是将I声明为变量,然后就在你之后尝试使用它,好像它是一个类型。