I would say the target.SetClipping(mask) is the best option, so that you can draw a whole scene clipped with the same mask, which is the most common.
You can create a new generic shape/polygon class to be used both for current drawable shapes and for masks. You can also let maks be extended or to accept grayscale arrays/images for raster alpha channel masks.
Logical classes for polygon and vectors would be usefull, but may not fit with SFML current feel. I would prefer a way where images, shapes, and text logics are completely separated from the display concept (mvc). if we want to draw an image, we create a Sprite, but if we want to draw a shape, we could also create a kind of "sprite" for it, a drawable object with some specific properties for display. Same thing for text and masks. On this point of view, masks are a kind of view object that receives any of these logical objects (shapes, images, text)