Hello,
For task switching I always go for the swap stack pointer and return approach.
Well, guess what is in the stack ?
To change tasks you just manipulates pointers (even if they are code pointers so kind of functors), but when you start a task, you most proably need to use the functor (the first address you'll put in the stack to branch to it on interrupt return).
Thomas.