Your code doesn't match your description (in the code B does not inherit from A, whereas in your description it does), but I think what you're saying is "I have a large number of classes like A, and a large number of classes that inherit from classes like A (C in your example), and there's a bunch of common stuff in those subclasses I'd like to factor out (into B in your example), but it includes stuff that depends on the specific A (calling an A method in your example) and it defeats the whole point to have to make many B's (one for each A) mostly all alike."
One thing you could use is the 'template class inheriting from argument' trick to define large numbers of B variants as a single template class:
template<class A> B : public A {
void eventHandler(Event* E) {
call methodToCall();
}
}
class C1 : public B<A1> {
... whatever
class C2 : public B<A2> { ...
If you have certain A classes that need slightly different stuff in B, you can also specialize the B template for those classes.