,BitFlipper wrote

Edit: I can't make virtual functions static. I don't believe this will be a problem since AFAIC the virtual tables themselves are static, so it doesn't matter if the class instance moves around memory.

Virtual tables aren't static:

class myClass {
  int a;
  static int b;
  virtual void myFunc();
  myClass() {}

looks like this in C:

static int _myClass_b;
typedef struct
  int m_a;
  void* myFunc
} MyClass; 

void _myClass(MyClass* cls)
  cls->myFunc = &MyClass_myFunc;