Salut,
J’ai rejoint un projet de recherche qui utilise OOQP, en particulier sa classe OoqpVector. C’est une classe abstraite avec un certain nombre de méthodes virtuelles, par exemple :
virtual double dotProductWith(OoqpVector& v) = 0
Cette méthod est implémentée par deux sous-classes SimpleVector
et DistributedVector
. En raison de la généricité, OoqpVector::dotProductWith
autorise toutes les combinaisons possibles :
SimpleVector.dotProductWith(SimpleVector)
DistributedVector.dotProductWith(DistributedVector)
SimpleVector.dotProductWith(DistributedVector)
DistributedVector.dotProductWith(SimpleVector)
Par contre, en pratique, la méthode est toujours appelée sur 2 vecteurs de même type (combinaisons 1 et 2). Les auteurs de OOQP ont donc implémenté SimpleVector::dotProductWith(OoqpVector&)
et DistributedVector::dotProductWith(OoqpVector&)
en castant le paramètre vers le type courant (Simple
ou Distributed
).
Ca fonctionne sans problème, mais je trouve ça assez vilain et je me demande s’il est possible de se passer des casts.
Une possibilité serait de virer OoqpVector::dotProductWith
, de déclarer les méthodes spécialisées SimpleVector::dotProductWith(SimpleVector&)
et DistributedVector::dotProductWith(DistributedVector&)
, et d’imposer aux classes/méthodes appelantes à forcer le même type pour les 2 vecteurs. Cela dit, le code utilise pas mal de OoqpVectors
(abstraits) un peu partout, donc ça m’a l’air compliqué.
Auriez-vous des idées ?
Merci,
Charlie