模板函数要求在非模板 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
是一个变量,然后紧接着你试图将它当作一个类型来使用。
有一个模板函数 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
是一个变量,然后紧接着你试图将它当作一个类型来使用。