У меня есть такой шаблон:
Thing * y = FindNearestItem();
if (y && (MenuElement * x = FindMenuElementNamed("Identity")))
x->SetText(FString("%.1f", y));
else if (x)
x->Clear();
if (y && (MenuElement * x = FindMenuElementNamed("X1")))
x->SetLocalData(y);
else if (x)
x->Clear();
По сути, я хочу использовать статическую таблицу: [ПРЕДУПРЕЖДЕНИЕ: действительно небрежный концептуальный код, недействительный, я нуб, вас предупредили]:
struct Table {
const char * label;
?lambda? lambda;
} MyTable[] = {
"Identity", [] (const char * label, Thing * y) { MenuElement * x = FindMenuElementNamed(label); (y && x) ? x->SetText(FString("%.1f", y)) : x->Clear(); },
"X1", [] (const char * label, Thing * y) { MenuElement * x = FindMenuElementNamed(label); (y && x) ? x->SetLocalData(y) : x->Clear(); },
};
Thing * y = FindNearestItem();
for (int i = 0; i != countof(MyTable); ++i)
MyTable[i].lambda(MyTable[i].label, y);
ПОЖАЛУЙСТА, имейте в виду, что действие отличается для каждой метки - для каждой строки в моей таблице.
Таким образом, шаблон в основном такой же, но разница в действиивзят, хотя он использует один и тот же набор данных (x, y, метка) в каждом случае.Но я не могу просто вызвать x-> DoAppresponThingFor (label, y);Я просто вернусь к созданию длинного каскада if / else на основе метки ...
Не стесняйтесь спрашивать меня о дальнейших разъяснениях.Я брожу в темноте с лямбдами, потому что у меня еще не было возможности их реально использовать ...