En primer lugar, no estoy realmente teniendo un problema, pero me gusta mantener las cosas lo más simples posible. Estoy usando una clase de plantilla llamada Math
y además de muchas otras cosas, hay funciones aleatorias.Función estática no templada en la clase de plantilla
Diferentes tipos de funciones aleatorias, y una función para establecer la semilla aleatoria. Entonces, cada función excepto la función de inicialización usa el tipo class Real
. Pero cuando quiero fijar la semilla tengo que pasar algún aleatorio (jaja) Tipo de poder llamar a la función:
Math<u32>::SeedRandom(System::time());
De nuevo, esto no es un problema real, pero tengo curiosidad si es posible Obtenga el mismo resultado sin la necesidad de usar el <u32>
.
Aquí un fragmento de la clase Math:
template <class Real>
class Math
{
public:
static void SeedRandom(u32 seed) { srand(seed); }
static Real UnitRandom() { return (Real)((f64)rand()/(f64)RAND_MAX); }
};
por cierto. f64
es typedef'd a double
y u32
a unsigned int
.
Sí, un objeto singleton para llamar a esa función sería posible, pero en ese caso sería realmente feo :) Solo quería saber si hay una forma de codificarlo, así que no hay necesidad de especificar el tipo. Lo intenté un poco y es posible llamarlo así 'Math :: SeedRandom ((u32) System :: time());'. Esto al menos mostraría que el tipo no se usa, pero solo hace que el tiempo de compilación sea innecesariamente más largo, y es aún más feo que llamar con ''. –
v01pe
@ v01pe: el uso de 'void *' en mi opinión sesgada pervertida no implicaría de ninguna manera que el tipo no se use. IMO, como ya he indicado, la función independiente es la mejor solución. Las funciones autónomas NO contradicen de ninguna manera el paradigma de OOP en C++ –
Por supuesto que tiene razón, ¡usar 'void *' no implica eso! – v01pe