template <class VertexType>
class GraphMatrix
{
};
template <class GraphType>
class Graph
{
typedef typename GraphType::VertexType VertexType;
GraphType* graph_;
void addVertex(VertexType vertex)
{
}
//...
};
int main()
{
Graph <GraphMatrix <int> > graph;
return 0;
}
Voir si j'ajouter typedef VertexType VertexType;//A
ligne à GraphMatrix
class
ce code passera la compilation et travaillerai, sinon il donne erreur de compilation. Erreur: C2039: 'VertexType': n'est pas un membre de 'GraphMatrix'. Ma question est la suivante 'y at-il un moyen (syntaxe) de faire ci-dessus le code de travail sans ajouter cette ligne stupide //A
'?Comment éviter typedef?
Non vrai - 'Graph' peut vérifier que' GraphType' est un modèle avec un paramètre par spécialisation. – jpalecek
Mais ne devrait pas - il est préférable pour une implémentation de s'appuyer sur une constract "Je vais être instancié avec des classes qui ont un typedef' VertexType' "que" Je ne vais être instancié qu'avec des classes de templates qui arrivent toujours avoir son premier paramètre de template en tant que VertexType ". Utilisation de la spécialisation ici semble hackish à moi et viole le principe le moins d'étonnement, à mon humble avis. Je repose mon cas. – Kos