Acho legal, uma outra alternativa é usar um template para as classes derivadas, parametrizando com um int, por exemplo: (ainda nessa linha, a propria classe pode ser o template, sem a necessidade de herança)
template <int NumFaces>
class DadoNFaces : public DadoStrategy {
int rolar() override {
return rng.gerar(1, NumFaces);
}
};
using D10 = DadoNFaces<10>;
Meu único porém (em um design mais complexo) seria o fato da classe ter um membro que não é passível de injeção e torna ela difícil de testar. Receber a dependência durante a construção da classe removeria esse problema e permitiria que eu passasse uma classe "mock" para testar.