Actually, you could -in theory- create a C++ class as a "Singelton" design pattern, ie a class that only allows one instance. It should then be possible to make the ISR as a static member function if you can guarantee that it will be allocated inside non-banked memory. Then you must trick the linker to believe that this function is called from the program, so it won't get optimized away.
Even if this is possible in theory (I have no idea if it is possible in reality), you achieve very little with this. Implementing and testing the class will take lots of time and you will get various code overhead. Worst of all it adds obscure complexity to the program.
So the above would be the academic's choise, while my first post would be the cynical, experienced engineer's choise