在模板(非成员)函数中使用模板类中的typedef

时间:2010-03-10 16:34:25

标签: templates typedef typename function-templates class-template

以下无法编译(无论如何,在Linux上使用gcc 4.2.1):

template< typename T >
class Foo
{
public:
   typedef int FooType;
};

void
ordinary()
{
   Foo< int >::FooType bar = 0;
}

template< typename T >
void
templated()
{
   Foo< T >::FooType bar = T( 0 );
}

int main( int argc, char **argv )
{
   return 0;
}

问题在于这一行:

   Foo< T >::FooType bar = 0;

...并且编译器提出了这个抱怨:

  

foo.c:在函数'void templated()'中:

     

foo.c:22:错误:预期`;'在'bar'之前

通常在没有声明类型时会看到这个,但据我所知,Foo&lt; T&gt; :: FooType应该在templated()内完全有效。

1 个答案:

答案 0 :(得分:2)

使用typename

  typename Foo< T >::FooType bar = 0;

请参阅this了解为何需要typename。