Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Vstudio ponte de mi parte!

Iniciado por Drácula, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Drácula

                                En algunas funciones del motor hago lo sig:

void CXVideo::Crear()
{
Merlin.Debug(_T("Inicio ")+_T("CXVideo::Crear"));
...
Merlin.Debug(_T("Fin ")+_T("CXVideo::Crear"));
}

¿Hay alguna forma de que VStudio me genere el string de la función que está compilando? Algo así como:

Merlin.Debug(_T("Inicio ")+NOMBRE_FUNCION);                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

DraKKaR

                                Interesante pregunta. El motor del Unreal tambien hace algo parecido, incluso va un paso más allá almacenando el stack de llamadas a funciones que se ejecuten. De esta manera cuando el programa peta te saca por panalla todo el recorrido ke ha hecho el programa hasta el error.

Si alguien sabe como hacerlo ke postee XD                                

Cronodragón

                                Que buena idea esa!

Bueno, por que no defines una variable global enumerada con un valor para cada funcion, y luego al inicio de cada funcion le asignas el valor correspondiente? Luego haces una funcion global que tome ese valor y retorne un nombre apropiado para la funcion... con un poco mas de trabajo incluso podrian registrarse los parametros. Y si haces una pila en vez de la variable, podras registrar toda esa info.

- Marco                                

_Grey

                                Existen unas macros definidas por defecto, como __FILE__ que indica el fichero que esta compilando en ese momento,si lo pones en la ayuda podras ver que tiene unas cuantas, pero sobre nombres de funciones me temo que no.........

Saludotes.                                

ethernet

                               
Como haces para tener el log global, comun a todas las clases?. me refiero de forma elegante xD. Pense hacerlo con sigletones pero me parece un pelin feo.

Saludos                                

Drácula

                                La idea de la enumeración me parece MUUUY dura de implementar, aunque es una buena idea.

Respecto a lo del log, pues...¡lo hago mal! Voy enseñando texto sin tener ninguna norma. Hay veces que ves el INICIO, preo nunca el FIN de una función! Pero es algo que quiero arreglar.                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

NeLo

                                Ya que habeis nombrado los singletones, ¿Podeis comentar algo hacerca de ellos?
                               
Drowning deep in my sea of loathing

RePAnd

                                La idea del singleton es muy sencilla, basicamente consiste en tener una instancia estatica de una clase, y un metodo estatico q te devuelve esa instancia, con lo que solo tendras una instancia en todo el programa de esa clase. Un ejemplo muy sencillo seria:

class Singleton {
  public:
     ~Singleton();
     static Singleton &GetInstance() {
        return m_Instance;
     }
  private:
     // el constructo ha de ser privado      
     Singleton();
   
     static Singleton m_Instance;
};

esta es la forma mas simple de hacerlo, hay miles de formas, en gamedev encontraras mas.
Recuerda crear la estancia estatica:
Singleton Singleton::m_Instance;

luego para conseguir la instancia q hay creada, solo tendrias q hacer Singleton::GetInstance();
bueno, no se si ha quedado claro, espero q si :sonriendo:

Un saludo.
                               

NeLo

                                Thx.
                               
Drowning deep in my sea of loathing

RePAnd

                                La url de gamedev que te decia es:
http://www.gamedev.net/columns/gameenginee...ring/singleton/                                

ethernet

                                Personalmente me gusta mas la idea del singleton templatizado, de esta manera tienes una instancia a un determinado tipo de clase.
La implementacion q tengo de singleton es:


template <class CType>

class CSingleton

{



public:

 

 static void init(){

  if(m_iObjCount == 0){    

   m_pInstance = new CType;

   m_iObjCount++;

  }

 }

 static void destroy(){

       if(!--m_iObjCount)

     delete m_pInstance;

 }



   

   static void SetInstance(CType *p){ m_pInstance=p;m_iObjCount++; }

   static CType *Instance(){ init(); return m_pInstance; }

   static int NumInstances(){ return m_iObjCount;}

   

private:

 static CType *m_pInstance;

 static int m_iObjCount;



};


Saludos

[ Este Mensaje fue editado por: ethernet el 2002-08-24 04:22 ]                                

ethernet

                                Dracula me referia a tu forma de implemetar el sistema de log no la manera en la q escribes el texto. Tienes una variable accesible desde todas las clases (seria como cout o asi) o como ?
saludos                                

jpastor

                                He rescatado unos fragmentos de codigo que tenia por ahi perdidos y quiza estas macros te puedan ayudar o por lo menos dar una idea de como hacer uno decentemente.



#ifdef _LOGMODE

#   define _LOGFUNCSTART(type, name, args)        type name args { _LOG (#name #args);
#   define _LOGFUNCEND                }
#   define _LOGCALL(name, args)            (_LOG ("Call --> " #name #args), name args)

#else

#   define _LOGFUNCSTART(type, name, args)        type name args
#   define _LOGFUNCEND                
#   define _LOGCALL(name, args)            name args

#endif // _LOGMODE



// ejemplo de uso _LOGFUNCSTART y _LOGFUNCEND
_LOGFUNCSTART (
int, MiFuncion, (int op1, float op2, char *op3))
{

   ...
   
   
// ejemplo de uso de _LOGCALL
   
int Resultado = _LOGCALL (Sumar, (10, 8));

   ...

} _LOGFUNCEND;





Con _LOGFUNCSTART/_LOGFUNCEND consigues que las funciones presenten su nombre y tipo de argumentos cada vez que las llamas, y con _LOGCALL haces una llamada a la funcion presentando en el log la llamada.

Un saludo.

[ Este Mensaje fue editado por: jpastor el 2002-09-03 16:28 ]                                

Drácula

                                Muy interesante...Creo que es una buena idea...                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

ethernet

                                alguien (q es gay xD) me dio esta direccion q puede q sirva.

http://www.geocrawler.com/archives/3/15321...02/8/0/9258251/

Saludos                                






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.