J'ai deux instances d'un robot de classe. Quand je cours une certaine méthode (par exemple, go()
) je veux chaque instance à aller si c'est sur une fréquence correcte. Exemple (pour simplifier tout est dans un fichier):Comment invoquer une méthode sur plusieurs instances en C++
class Robot {
int freqency_from;
int freqency_to;
bool is_going = false;
bool isOnFrequency(int frequency) {
return (frequency >= frequency_from && frequency <= frequency_to);
}
public:
Robot(int _freqency_from , int _freqency_to) {
freqency_from = _freqency_from;
freqency_to = _freqency_to;
}
void go(int frequency) {
if (isOnFrequency(frequency)) {
is_going = true;
}
}
bool isGoing() {
return is_going;
}
};
int main() {
Robot robot1 = Robot(1, 3);
Robot robot2 = Robot(3, 5);
cout << robot1.isGoing(); // false
cout << robot2.isGoing(); // false
Robot::go(1); // should be run for each and every instance of the Robot class
cout << robot1.isGoing(); // true
cout << robot2.isGoing(); // false
return 0;
}
Comment faire fonctionner ce pseudo-code? Est-il même possible sans faire un vecteur de toutes les instances de Robot et de cartographier dessus?
Vous pourriez probablement avoir un vecteur membre statique de pointeurs vers des instances existantes et rendre la méthode 'go' statique également. Mais je ne pense pas que ce soit un bon design. – Corristo
Ceci se dirige vers statique/territoire "singleton" et ressemble à une odeur de code pour moi. Dans ce cas, s'il y a quelque chose que Robot devrait faire, alors vous devriez avoir une sorte de RobotManager qui en garde une collection pour faire diverses tâches. Cette logique métier ne doit pas être dans la classe 'Robot' elle-même. – CoryKramer
@CoryKramer [Je vais l'appeler .. SomethingManager] (https://blog.codinghorror.com/i-shall-call-it-somethingmanager/) –