J'ai une classe appelée ToolConfigurationVector
et une classe appelée JointVariableVector
. Je dois être capable de convertir entre ces deux classes (ce sont des représentations différentes des mêmes données)Manière élégante/efficace de créer une classe spécifique à une autre classe d'une autre classe
Un ToolConfigurationVector
se compose de seulement 6 types de données primitifs. C'est toujours le cas.
A JointVariableVector
est une représentation qui est spécifique à un Robotarm, représenté par la classeArm
.
Donc, pour une sous-classe de Arm
(par exemple SimpleArm
) la représentation et donc la conversion à ToolConfigurationVector
est tout à fait différente de la représentation et la conversion d'une autre sous-classe de Arm
(par exemple ComplexArm
)
Plus tard, je veux pour utiliser les classes comme ceci:
Arm * someArm = new ComplexArm();
// ...
JointVariableVector jvv = someArm.currentJointVariableVector();
ToolConfigurationVector tcv = jvv.toToolConfigurationVector(); // no problem using virtual function
JointVariableVector how = tcv.toJointVariableVector(); // how?
Je ne veux pas inclure d'informations sur quelle sous-classe de Arm
est utilisé dans ToolConfigurationVector
, les informations doivent être stockées en quelque sorte dans JointVariableVector
Bien sûr, je pourrais utiliser des modèles comme celui-ci:
JointVariableVector<ComplexArm> how = ...
Mais ce n'est pas applicable dans mon cas, je dois résoudre ce en utilisant SEULEMENT
someArm
tcv
ToolConfigurationVector
JointVariableVector
Je pourrais bien sûr donner Arm
une méthode virtuelle comme jointVariableVectorFromToolConfigurationVector(ToolConfigurationVector v)
mais je ne peux pas le rendre statique, et parce qu'il n'a rien à voir avec l'objet Arm
réelle mise en œuvre comme méthode (sans statique) me semble faux. Que puis-je faire pour obtenir une solution élégante?
Bien sûr, cette solution devrait aussi être efficace (en termes de classes, d'objets et de temps d'exécution).
Désolé pour le titre, mais je ne peux pas obtenir ce résumé. Pourrait être nominé pour le prix du «pire titre» ... –
Qu'en est-il des fonctions gratuites? Sont-ils autorisés? –
Que voulez-vous dire par fonctions gratuites? J'ai besoin de convertir un 'ToolConfigurationVector' en un' JointVariableVector', mais cette conversion nécessite des informations supplémentaires (le ** type ** de 'someArm'). Je sais comment je pourrais le faire en utilisant une méthode (virtuelle) dans 'Arm', mais cela me semble faux. –