That makes sense, and I don’t think you really want a rotor class at all - just a “rotation” class that has methods to e.g. rotate a vector or return the axis of rotation or return the angle of rotation.
It’s very much a design decision what to put at the _type_ level and what to put at the _value_ level. For instance, you might want rotation, translation, dilation to be separate classes, or you may want to have a single class that just represents “affine transformation”. Similarly, you might constrain rotations to be a quaternion with unit norm, or you might allow them to have any norm (so it’s a simultaneous rotation and dilation). I’d be tempted to put as much as possible at the value level and then specialize as necessary.
