Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Toda La Vida Haciendolo Asi

Iniciado por zupervaca, 11 de Mayo de 2006, 12:05:25 PM

« anterior - próximo »

zupervaca

 Pues vereis llevo toda la vida usando templates con strings de una forma un poco peculiar, pero me gustaria saber si exite otra manera que esta de usar string con templates:

static char valor_para_el_template[] = "Lo que sea";
template <const char *string> class margatita ....

margarita<valor_para_el_template> ....


La unica manera de pasar un valor para el template es con la variable static, ¿pero existe otra manera mas comoda, truco o lo que sea? es que empiezo a tener el codigo lleno de statics :(

tamat

 tal vez si explicases el proposito del template y de recibir un string como parametro podriamos aconsejarte
Por un stratos menos tenso

zupervaca

 Ejemplo un pelin absurdo de lo que digo:

template <const char *nombrehumano> class Humano
{
public:
bool minombrees( const char *humano )
{
if( strcmp(humano, nombrehumano) == 0 )
 {
   return true;
 }
 else
 {
   return false;
 }
}
};

Como se ve se le ha de pasar un string al template para luego usarlo en la funcion minombrees

tamat

 sigo sin entenderlo, por qué no pasas el string como parametro del constructor?
Por un stratos menos tenso

TiRSO

 Claro, como dice Tamat para eso que haces, lo más normal sería pasarle el string que quieras como parámetro de un constructor que hagas (que veo que te conformas con el de por defecto).
Los templates normalmente se usan para generalizar y trabajar con más de un tipo de clase. Por ejemplo, los vectores de stl están "templatizados" para que puedas hacer un vector de enteros (vector), un vector de flotantes (vector) o un vector de lo que quieras vamos. Nunca había visto usar los templates para pasar parámetros... xD


(PD: igual no entendí lo q quieres hacer y sí hace falta un template pero a simple vista no)

zupervaca

 Veamos, la funcionalidad real es un manager de recursos que saca los recursos de un xml, para ello cada manager tiene un tipo de recurso diferente y un tag de cierre, apertura, etc. si lo pongo en el constructor el template del manager solo tragaria con un tipo de tag xml y esto no vale, si lo paso en el constructor tengo que inicializarlos pasandoles los strings que son constantes para el manager al igual que el tipo de recurso que controla, la mejor solucion es pasarle los strings de esta manera ya que es un template unico para su recurso y para sus tags.

Esto es el objetivo:
template <class RESOURCE, class TYPE, const char *tagCloseManager, const char *tagResource> class IManager{...}
Como se ve el recurso es unico como sus tags y su tipo, con lo que lo correcto es hacer un template en el que le pasas todos los parametros.

He estado buscando mas info por internet y parece que la unica solucion es la que llevo usando toda la vida :(

tamat

 Yo lo que hago es tener un template Gestor de recursos que recibe como parametro la clase del recurso que va a "gestionar", de esta manera hay diferentes segun diferentes recursos. Pero creo que en tu caso te interesa más mi sistema de modulos:

Tengo una clase llamada Modulo que implementa el interfaz de cada Modulo de mi sistema, todos estos heredan de esa clase (RenderModule, InputModule,...). Lo bueno es que la clase Modulo tiene un contenedor estático de instancias, entonces el constructor de Modulo agrega su instancia a dicho contenedor lo cual viene bien para saber cuantos módulos hay en funcionamiento en mi sistema.

Cada nuevo Modulo que hereda del interfaz le pasa al constructor el nombre de dicho módulo (p.e. "RenderModule") y la lista con los tags XML con los que trabaja el módulo (p.e. "renderconfig,openglconfig". Además reimplementa el método virtual de la clase Modulo llamado ProcessTag(TagXml*).

Entonces la clase Modulo tiene un método estático que es LoadXML(const char*), este carga el XML, va tag a tag y mira qué modulos hay que procesen dicho tag, si hay alguno entonces llamada al método ProcessTag de dicho modulo y le pasa el tag.

De esta manera creo un unico XML y cada módulo coge lo que necesita.

Espero que te sea de ayuda.

Por un stratos menos tenso

zupervaca

 No me vale pasar al constructor el string por que tendria que derivar un template, cosa extraña por que los templates se hicieron para crear plantillas y evitar asi derivar una clase de otra y dar soporte sin conocer los tipos, el sistema que indicas obliga al programador a derivar del template siempre que quiera crear un nuevo manager lo cual en proyectos pequeños esta bien, pero cuando tienes mas de 100 managers diferentes puede ser una locura.

Flint

 100 managers o cómo diseñar con el culo.

zupervaca

Cita de: "Flint"100 managers o cómo diseñar con el culo.
¿Por que no explica el diseño correcto para esto?

Flint

 
Cita de: "zupervaca"
Cita de: "Flint"100 managers o cómo diseñar con el culo.
¿Por que no explica el diseño correcto para esto?
Mejor explica tú cómo puedes tener 100 managers sin un diseño de base pésimo. Entre tanto gestor, tendrás alguno que te haga la colada...  :P  

zupervaca

Cita de: "Flint"
Cita de: "zupervaca"
Cita de: "Flint"100 managers o cómo diseñar con el culo.
¿Por que no explica el diseño correcto para esto?
Mejor explica tú cómo puedes tener 100 managers sin un diseño de base pésimo. Entre tanto gestor, tendrás alguno que te haga la colada...  :P
Pues fijate que puedes tener managers hasta para controlar diferentes tipos de objetos en pantalla, desde enemigos, armas, municion, etc. esta claro que nunca has hecho un proyecto grande en el que no solo se hacen managers para leer texturas, modelos, etc.

Flint

 
Cita de: "zupervaca"
Cita de: "Flint"
Cita de: "zupervaca"
Cita de: "Flint"100 managers o cómo diseñar con el culo.
¿Por que no explica el diseño correcto para esto?
Mejor explica tú cómo puedes tener 100 managers sin un diseño de base pésimo. Entre tanto gestor, tendrás alguno que te haga la colada...  :P
Pues fijate que puedes tener managers hasta para controlar diferentes tipos de objetos en pantalla, desde enemigos, armas, municion, etc. esta claro que nunca has hecho un proyecto grande en el que no solo se hacen managers para leer texturas, modelos, etc.
Ahhh, sí, me olvidaba de que eres uno de los grandes de la industria.

zupervaca

 
Cita de: "Flint"
Cita de: "zupervaca"
Cita de: "Flint"
Cita de: "zupervaca"
Cita de: "Flint"100 managers o cómo diseñar con el culo.
¿Por que no explica el diseño correcto para esto?
Mejor explica tú cómo puedes tener 100 managers sin un diseño de base pésimo. Entre tanto gestor, tendrás alguno que te haga la colada...  :P
Pues fijate que puedes tener managers hasta para controlar diferentes tipos de objetos en pantalla, desde enemigos, armas, municion, etc. esta claro que nunca has hecho un proyecto grande en el que no solo se hacen managers para leer texturas, modelos, etc.
Ahhh, sí, me olvidaba de que eres uno de los grandes de la industria.
No hay que ser grande para saber hacer analisis previo a la programacion de un juego, con haber hecho algun proyecto, por muy simple que sea, podrias saber que en un juego hay mas que un manager de texturas y modelos.

Flint

 
Cita de: "zupervaca"
Cita de: "Flint"
Cita de: "zupervaca"
Cita de: "Flint"
Cita de: "zupervaca"
Cita de: "Flint"100 managers o cómo diseñar con el culo.
¿Por que no explica el diseño correcto para esto?
Mejor explica tú cómo puedes tener 100 managers sin un diseño de base pésimo. Entre tanto gestor, tendrás alguno que te haga la colada...  :P
Pues fijate que puedes tener managers hasta para controlar diferentes tipos de objetos en pantalla, desde enemigos, armas, municion, etc. esta claro que nunca has hecho un proyecto grande en el que no solo se hacen managers para leer texturas, modelos, etc.
Ahhh, sí, me olvidaba de que eres uno de los grandes de la industria.
No hay que ser grande para saber hacer analisis previo a la programacion de un juego, con haber hecho algun proyecto, por muy simple que sea, podrias saber que en un juego hay mas que un manager de texturas y modelos.
De unos pocos managers a 100 hay una (gran) diferencia: probablemente un diseño hecho con el culo, como he dicho.  :P






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.