Lol nie.
Wszystko czego potrzebuję to w trakcie inicjalizacji obiektu MechPartWidget to zapamiętać przesłane wartości ballistic, missile, energy i support, a jeśli któraś z nich jest 0 pochować ilustrujące je elementy GUI - potem stan klasy nie będzie się już zmieniał. I co mam, wpierdzielić teraz nową klasę tylko po to? Przegięcie pały Bracie...ale, już wiem skąd się biorą zryte projekty z piedylionem zbytecznych klas skoro takie rozwiązanie uważane jest za dobre.
Niemniej, dyskusja z Wami naprowadziła mnie na chyba pierwsze w życiu sensowne zastosowanie do czegoś lambdy :] Już wczoraj zauważyłem, iż mogę użyć zamiennika funkcyjnego:
Kopiuj
void setupHardpointsGUI(int count, QLablel *left, QLabel *icon, QLabel *max)
{
if (count == 0)
{
left->hide();
max->hide();
icon->hide();
}
else
{
QString n(QString::number(count));
left->setText(n);
max->setText('/' + n);
}
}
jest to OK, ale nie podobało mi się, że sobie trochę zaśmiecę interfejs klasy metodą, która będzie użyta tylko 4 razy w jednej metodzie wywoływanej jedynie raz - generalnie lubię minimalizm. Ale w końcu znalazłem niewymuszone użycie dla lambdy ^^
Kopiuj
void MechPartWidget::setHardpointsNumber(int ballistic, int missile, int energy, int support)
{
//remember number of hardpoints
hardpointsCount[HardpointTypes::Ballistic] = ballistic;
hardpointsCount[HardpointTypes::Missile] = missile;
hardpointsCount[HardpointTypes::Energy] = energy;
hardpointsCount[HardpointTypes::Antipersonnel] = support;
auto setupHardpoint = [](int count, QLabel *left, QLabel *icon, QLabel *max)->void
{
if (count == 0)
{
left->hide();
max->hide();
icon->hide();
}
else
{
QString n(QString::number(count));
left->setText(n);
max->setText('/' + n);
}
};
setupHardpoint(ballistic, ui->labelBallisticHardpointsLeft, ui->labelBallisticIcon, ui->labelMaxBallisticHardpoints);
setupHardpoint(missile, ui->labelMissileHardpointsLeft, ui->labelMissileIcon, ui->labelMaxMissileHardpoints);
setupHardpoint(energy, ui->labelEnergyHardpointsLeft, ui->labelEnergyIcon, ui->labelMaxEnergyHardpoints);
setupHardpoint(support, ui->labelSupportHardpointsLeft, ui->labelSupportIcon, ui->labelMaxSupportHardpoints);
}
I to by było tyle w temacie dodawania nowej klasy do projektu :]