Bonjour à toutes et à tous !
J'utilise depuis quelques temps déjà les templates pour mettre de la variabilité sur les types, mais je n'ai jamais été confronté au problème suivant :
Soit un concept A (un ensemble de distribution de probas dans mon cas), proposant un service sample() dont le résultat peut être :
- constant
- variable dans un espace X
- variable un espace X et un autre espace Y.
Grand naïf, j'ai pensé faire ça :
Le service commun varie dans ses arguments : sample(), sample(X), ou sample(X, Y) et l'implémentation varie selon les cas. Du coup je ne sais pas si je dois/peux donner le même nom à ces patrons de classes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 class A; template<typename X> A; template<typename X, typename Y> A;
- D'un côté si leur implémentation et leur service varie, c'est qu'ils ont pas grand chose à voir.
- D'un autre côté ces sont tous des A, du coup j'ai eu envie de tous les nommer pareil avec l'idée que le nombre d'arguments template suffiraient à lever l'ambiguité. Le compilateur me signale aimablement que je n'y connais rien "class A redeclared with ... argument template", ce dont je lui sais gré.
Du coup j'hésite entre
- renommer les patrons de classe Foo, XVariableFoo, XYVariableFoo mais même si ça a l'air d'être la solution la plus facile quelque chose me dit que ça cloche
- en apprendre plus sur toute autre approche que vous identifiriez comme étant une meilleure solution problème (peut être faut il donner à tout le monde le même nombre d'arguments template et utiliser des trucs du genre dispatch/enable_if/traits...
)
Qu'en pensez-vous ?
Partager