rename start() to run()
Using std::function as strategy.