C++ (Qt)
class IValidatorUpdater {/* place here basic public methods */}
bool UpdateEditValue(QLineEdit *edit, float *value, const QStrning &name, IValidatorUpdater *vu);
И дальше передавай класс с нужной фнукциональностью.
Хмм... ну и во что это вольется? Сейчас вызов выглядит
C++ (Qt)
if (UpdateEditValue(edit, UNSIGNED_FLOAT, &data->mBias, 0.0f, 1.0f, 0.5f, "Bias")) ..
Терпимо, но длинновато (достаточно громоздко). Предлагается
C++ (Qt)
MyUpdater updater(0.0f, 1.0f, 0.5f);
...
if (UpdateEditValue(edit, &data->mBias, "Bias", &updater)) ..
Возможно есть смысл хранить мапу <QLineEdit *, IValidatorUpdater *> в классе окна. Ну может и компактнее, но не особо. И ф-ционал IValidatorUpdater ограничен т.к. он не имеет указателя на данные и name.
На первый взгляд тут много заманчивых обобщений, но как-то "не ложится".
1) Почему только QLineEdit? Попапок и чекбоксов тоже хватает. Но тогда придется делать извлечение из виджета всяко-разно. Напр чекбокс может соответствовать (в данных) bool или int или битовому флагу
2) Почему конкретный "float"? Конечно есть и int и double и разнообразные enum'ы. Template напрашивается, но тогда опять возня с извлечением: toInt или toDouble или как?
3) Ну и подача адреса данных неприятно режет глаз. Нужен public, положили на геттеры/сеттеры. Но они ведь у каждого класса данных свои, как обобщать? Поэтому часто приходится вызовы UpdateEditValue оборачивать (геттером в локальную, если вернула true то сеттер)
Конечно все это можно пережить, но это неаккуратно. Как разложить все по полочкам?