Рассмотрим следующее определение класса:
class Car : public Vehicle {
private:
TouchScreen a;
RadioAntenna b;
Blah c;
public:
Car(TouchScreen &a1) {
a = a1; //copy ctor
}
Car(RadioAntenna &b1) {
b = b1;
}
Car(Blah &c1) {
c = c1;
}
void update(Touchscreen &a1) {
a.update(a1);
}
void update(RadioAntenna &b1) {
b.update(b1);
}
void update(Blah &c1) {
c.update(c1);
}
}
class Fleet {
private:
std::map<int, Car> _fleet; //vehicle number, Car
public:
template <typename T>
void update(int vehicle_num, T &t) {
auto it = _fleet.find(vehicle_num);
if (it == _fleet.end()) {
_fleet[vehicle_num] = Car(t);
}
else {
it->second.update(t);
}
}
}
Fleet
содержит коллекцию автомобилей.Если вы хотите обновить переменную-член определенной машины,
Fleet f;
f.update<TouchScreen>(4, a1);
f.update<Blah>(10, c1);
В будущем в Car можно определить больше экземпляров класса.Есть ли способ уменьшить количество перегруженных функций Constructor и update ()?Использование шаблонов возможно?Я чувствую, что это выглядит некрасиво, мудрый дизайн, использующий так много перегруженных функций.