У меня есть приложение, которое имеет множество функций, которые проходят через все элементы панели инструментов меню.
Код выглядит примерно так:
subMenuDefaultMenuShortcuts( ui->fileMenu );
subMenuDefaultMenuShortcuts(ui->editMenu);
subMenuDefaultMenuShortcuts(ui->windowMenu);
subMenuDefaultMenuShortcuts(ui->helpMenu);
subMenuUpdateLabels(ui->fileMenu,hierarchy);
subMenuUpdateLabels(ui->editMenu,hierarchy);
subMenuUpdateLabels(ui->windowMenu,hierarchy);
subMenuUpdateLabels(ui->helpMenu,hierarchy);
Возможно, я изменю эту реализацию, иначе меню может иметь подменю.Таким образом, поиск и замена кода не только уродливы, но и плохо читаемы и подвержены ошибкам.
в идеале я хотел бы что-то вроде этого:
OnAllMenus(functionName,params ...)
, поэтому мой код будет выглядеть так:
OnAllMenus(subMenuUpdateLabels)
OnAllMenus(subMenuUpdateLabels,hierarchy)
OnAllMenus(someFunction,hierarchy,argument1,argument2)
Я хотел использовать макрос, но их использование не рекомендуется.Однако использование встроенных функций с указателями на функции приводит к некоторому трудно читаемому коду.(И я не видел ни одного примера с указателями на функции, ожидающими переменное число аргументов с функцией).
Есть ли какой-нибудь лучший / более чистый способ сделать это без добавления слишком сложного неуправляемого кода.