J'utilise la bibliothèque de graphes Boost et j'ai créé mes propres classes.Obtenir/déduire type dans la fonction de modèle pour la valeur de retour
Maintenant, j'ai la fonction suivante:
template< class VERTEXPROPERTIES >
VERTEXPROPERTIES& properties(const Vertex& v) const
{
typename property_map<FilteredGraphContainer, vertex_properties_t>::const_type param = get(vertex_properties, graph_);
return param[v];
}
Lorsque j'utilise cette fonction dans un modèle de classe comme ceci:
template< class VERTEXPROPERTIES, class EDGEPROPERTIES >
class Graph
{
// all the code
};
cela fonctionne. Cependant, quand je veux l'utiliser dans une classe comme ceci:
template < class GRAPH, class EDGE_PREDICATE, class VERTEX_PREDICATE >
class FilteredGraph
{
// all the code
};
et appliquer la fonction des propriétés() à un objet FilteredGraph, le compilateur se plaint qu'il ne peut pas trouver la fonction.
Pour autant que je l'ai découvert jusqu'à présent, cela est probablement dû au paramètre de modèle manquant dans la liste des arguments.
Pour la classe Graph, ce paramètre de modèle est facile à trouver, car il est défini lors de la création d'un objet graphique.
Mais pour le FilteredGraph, il devrait être capable de le déduire du paramètre GRAPH-template.
Puis encore, je pense que le compilateur aura quand même des problèmes pour obtenir le bon type de valeur de retour car cela pourrait probablement être nécessaire pour le savoir ...
Je voudrais vraiment garder ce concept avec la fonction properties() car cela permet de garder les autres fonctions génériques.
Avez-vous des idées pour résoudre ce problème, en conservant peut-être le concept?
Veuillez publier l'erreur de compilation et les définitions des classes. Vous nous avez donné des informations ** Non **. –
Mes excuses pour cela. Je n'ai pas posté cela ici, car je pensais que cela ne ferait qu'encombrer la question. L'erreur du compilateur était simplement qu'il ne pouvait pas trouver la fonction qui était utilisée dans mon code.J'ai été capable de le fixer à la fonctionnalité property_traits fournie par la bibliothèque boost. Je posterai la réponse séparément. – Shadow
Non, ne vous inquiétez pas. Je n'encombrerais pas la réponse. Les erreurs de compilation sont en général extrêmement utiles. Parfois un peu énigmatique, mais plus que très souvent, extrêmement précis. –