Usando typedefs de uma classe de modelo em uma função de modelo (não membro)
-
19-09-2019 - |
Pergunta
O seguinte falha em compilar (com o GCC 4.2.1 no Linux, de qualquer maneira):
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;
}
O problema é com esta linha:
Foo< T >::FooType bar = 0;
... e o compilador faz esta reclamação:
foo.c: em função 'void modated ()':
foo.c: 22: erro: esperado `; ' antes de 'bar'
Normalmente, se vê isso quando um tipo não foi declarado, mas até onde eu sei, foo <t> :: Footype deve ser perfeitamente válido dentro de modificado ().
Solução
usar typename
:
typename Foo< T >::FooType bar = 0;
Ver isto Pelo por que o tipo de tipo é necessário.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow