2010-02-21 5 views
2

J'ai un problème très étrange avec les modèles. Obtenir une erreur error: ‘traits’ is not a template. Je n'ai pas pu reproduire le problème sur un exemple de projet de test. Mais ça arrive sur mon projet (qui est plus grand que ce que je peux poster ici).erreur: 'traits' n'est pas un modèle - C++

Quoi qu'il en soit, voici les fichiers et les usages que j'ai. Quelqu'un a une idée de quand cette erreur se produit?

J'ai les éléments suivants dans traits.hpp.

namespace silc 
{ 
    template<class U> 
    struct traits<U> 
    { 
     typedef const U& const_reference; 
    }; 

    template<class U> 
    struct traits<U*> 
    { 
     typedef const U* const_reference; 
    }; 
} 

Ceci est utilisé dans un autre fichier d'en-tête.

namespace silc { 

    template<typename T> 
    class node {     
    public: 

     typedef typename traits<T>::const_reference const_reference; 

     const_reference value() const { 
      /* ... */ 
     } 
    } 
} 

Répondre

3

La syntaxe pour la spécialisation de modèle est ... pas agréable.

Je crois que votre erreur peut être corrigée en remplaçant struct traits<U> par struct traits (mais laissez struct traits<U*> tel quel!).

Mais regardez du bon côté! Au moins, vous ne faites pas de spécialisation partielle sur les types de fonctions:

// Partial class specialization for 
// function pointers of one parameter and any return type 
template <typename T, typename RetVal> 
class del_ptr<T, RetVal (*)(T*)> { ... }; 

// Partial class specialization for 
// functions of one parameter and any return type 
template <typename T, typename RetVal> 
class del_ptr<T, RetVal(T*)> { ... }; 

// Partial class specialization for 
// references to functions of one parameter and any return type 
template <typename T, typename RetVal> 
class del_ptr<T, RetVal(&)(T*)> { ... }; 
+1

Merci. C'était une erreur stupide que j'ai jamais faite. Merci encore d'avoir signalé cela. –