Recomendações:
- 39: Não tente criar uma instância de uma
class template usando um tipo para o qual não exista uma função membro definida na
class template
- 40: Evite múltiplas definições de
funções sobrecarregadas em conjunção com instanciação de class template
Não é possível, para o C++, identificar os requerimentos
de tipos de argumentos para class templates ou para function templates. Isso pode resultar em que o tipo escolhido pelo
usuário não seja compatível com a interface, conforme definido pela template. Por
exemplo, uma class template pode requerer que um tipo de
argumento tenha um operador de comparação definido.
Um outro problema com tipos de dados em templates pode
advir de funções sobrecarregadas. Se uma função for sobrecarregada, pode haver um
conflito se o tipo do elemento aparecer explicitamente em alguma das sobrecargas. Após a
instanciação, pode haver duas funções que tenham, por exemplo, o tipo int como
um argumento. O compilador pode reclamar, mas há o risco de que o projetista da classe
não note. Nos casos em que haja o risco de múltiplas definições de funções membro,
tal fato deve ser criteriosamente documentado.
Exemplo 34: Problema quando se
usa tipos parametrizados (Cfront 3.0 ou outros compiladores) |