class У;class X {....protected //что бы потомкам пришло тоже static Y *y;}Y* X::y; //если я правильно понял документацию, то статические члены должны быть определены отдельно.// в x.cppX::X() { y->register_me(this); // гарантированно, что объект У создаётся раньше чем любой из реализующих Х}
Y myY;X::y = &myY;
// hclass Y{ public: Y(); ~Y(); Y* instance(); private: static Y *m_instance;};inlineY* Y::instance(){ return m_instance;}// cppY::Y * m_instance = 0;Y::Y(){ if(!m_instance) m_instance = this; ...}Y::~Y(){ m_instance = 0;}
void X::somemethod(){ Y::instance()->doSomething();}