Aktionen
Fehler #634
geschlossenreinstantiated()-Methode für Entity
Beginn:
29.12.2016
Abgabedatum:
% erledigt:
0%
Geschätzter Aufwand:
0:06 h
Beschreibung
Wenn man ->find nach einer Basisklasse macht, erhält man vom em nicht die vollen Informationen der abgeleiteten Klasse.
Hierfür wird man im Allgemeinen einen switch nachschalten müssen, der die Entities mit ihren abgeleiteten Klassen reinstantiiert. Innerhalb eines switches führt das aber zu unschönen Scope-Konstrukten:
case Enums::AppType::ATTENDANCE:
{
auto attendanceData = em->findById<AppAttendanceData>(this->getId(),true);
result = attendanceData;
}
break;
Schöner ist ein Template, das an dieser Stelle den switch vereinfacht:
template <class T> QSharedPointer<T> reinstantiated() {
return EntityManager::getDefaultInstance()->findById<T>(this->getId(),true);
}
Damit sähe der switch so aus:
case Enums::AppType::ATTENDANCE:
result = this->reinstantiated<AppAttendanceData>();
break;
Aktionen