Loader does store multiple function-object's. Not all function-object's are of the same type. That's exactly the usecase of std::function.
Till now a std::shared_ptr<void> was used. It pointed to a struct which contains the function-pointer and the arguments.
The design forced us to use classes and nudged us to store all arguments in that class.
The time_left argument is never used but there are some functions which do some sort of progressive load (CSimulation2Impl::ProgressiveLoad). Should thous functions use the time_left or can that parameter be removed?