Je sais que ce problème a pu être posé auparavant, mais je ne sais vraiment pas quoi chercher, car je ne suis même pas sûr du titre choisi.Éviter le code de redondance utilisant la covariance dans l'héritage orienté objet
Ce que je veux atteindre: Si je getMeasurement (int timestep) avec une valeur entière non contenue dans la carte d'un objet capteur, la mesure demandé doit être interpolé (si possible) en utilisant une mesure méthode spécifique interpoler (...). Il devrait obtenir les deux objets Measurements corrects de la carte à utiliser pour l'interpolation dans le super classe Sensor et les interpoler, mais je ne sais pas comment et si je peux appeler l'interpolation. Peut-être avec des génériques/typename ou des modèles de conception.
Sensor someSensor = ...
Measurement measurementAt2 = someSensor.getMeasurement(2);
// should interpolate value if map measurements in someSensor not has the key 2
Informations additionnelles:asensor :: mesures ne contient que AMeasurements. BSensor :: mesures contient juste BMeasurements. ... Ces mesures contiennent différents types de valeurs et, par conséquent, chaque sous-classe de mesure doit être interpolée différemment.
abstract class Sensor {
map<int, Measurement> measurements;
Measurement getMeasurement(int timestep);
}
class ASensor : Sensor {
...
}
class BSensor : Sensor {
...
}
abstract class Measurement {
...
}
class AMeasurement : Measurement {
AMeasurement interpolate(AMeasurement other, int timestep);
}
class BMeasurement : Measurement {
BMeasurement interpolate(BMeasurement other, int timestep);
}
Si j'ajoute une méthode abstraite/virtuelle mesure interpolée (mesure autre, int timestep) dans la mesure de l'héritage, cette signature ne serait pas bon pour la sous-classe, comme je l'ai besoin de vérifier le type de classe et jette aussi l'autre mesure.
J'apprécie une réponse possible de coder en C++ 11, que j'utilise actuellement.
EDIT: Les sous-classes ASensor + AMeasurement, BSensor + BMeasurement, ... sont des plugins chargés indépendamment si ces informations sont nécessaires.
EDIT2: Ajout des types de retour des méthodes (que j'ai oublié).
Comment remplissez-vous les 'mesures'? – erip
Écrivez un petit morceau de code de conducteur montrant comment vous avez l'intention d'appeler le code. Peut-être que nous pouvons alors commenter. –
Le capteur a une méthode pour lire les données spécifiques d'une chaîne en utilisant une méthode abstraite/virtuelle dans Mesures pour créer des mesures en utilisant seulement des parties spécifiques de la chaîne. Cette méthode est implémentée différemment dans chaque sous-classe. –