Не забывайте, что у startManufacturing есть скрытый параметр this.
Четыре варианта.
1. Использовать указатель на метод App:
Rest::function(char * function_name, int (App::* f)(String), App& object)
// вместо App можно какой-то интерфейс, который App реализует
…
object.*f("string");
...
bt_rest.function("", &App::startManufacturing, *this);
2. Сделать startManufacturing static:
class App {
static int startManufacturing(String command)
};
3. Сделать обёртку с замыканием:
Rest::function(char * function_name, int (*f)(String, void*), void*);
void doStartManufacturing(String command, void* closure) {
reinterpret_cast<App*>(closure)->startManufacturing(command);
}
...
bt_rest.function("startManufacturing", doStartManufacturing, this);
4. «Избегай незнакомых женщин и глобальных переменных». Костыль, в общем.
App app;
int doStartManufacturing(String command) { return app.startManufacturing(command); }
...
bt_rest.function("startManufacturing", doStartManufacturing);
Ах да. Вы передаёте String’и по значению. Приспособлены они к такой передаче или всё же лучше по ссылке?