CRTP使えばどうだろう?

template <typename Derived>
class M {
public:
Derived &from(){ return static_cast<Derived &>(*this); }
};

class A : public M<A>{};
class B : public M<B>{};