模板函数要求在非模板 class 中存在内部 class

Template function requires existence of inner class in non-templated class

有一个模板函数 f 要求其模板参数类型 T 有一个名为 [=26] 的内部 class =]内。

f 中 class 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 被声明为类型。 该模板尚未实例化。 类型 Inner 是否存在首先变得相关 关于实例化 - 不是定义。我哪里错了?

我觉得你想做

typename T::Inner i;

typedef typename T::Inner I;
I i;

而你在问题中所拥有的实际上声明 I 是一个变量,然后紧接着你试图将它当作一个类型来使用。