[RESUELTO] FUNCIONES GLOBALES CLASS

Iniciado por Miseryk, 20 Diciembre 2013, 15:39 PM

0 Miembros y 1 Visitante están viendo este tema.

Miseryk

Hola a todos, me estaba preguntando cómo podría hacer yo una clase que tenga funciones globales, y que a su vez permita templates ej:

MiClase::Mensaje("hola"); //función común

//Template
a y b = int
MiClase::Suma(a, b);

a y b = float
MiClase::Suma(a, b);

No sé si es mejor una clase o un namespace, para mi es todo de lo mismo *-)

Desde yá muchas gracias.
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

ivancea96

Template<class T> MiClase(T a, T b);

Así?

Enviado desde mi ST21i mediante Tapatalk

Miseryk

En realidad estoy buscando algo extremadamente fácil que podía hacer en VB6 que era como declarar un módulo y llamarlo así:

Module1.Función()

Algo así, que la clase tenga solamente funciones y variables globales para llamar desde cualquier lado, como RandomNumber, Suma, Resta, blabla, pero no puedo hacerlo funcionar con template<typename T> T Suma(T a, T b) por ejemplo, porque cuando trato de compilar me tira errores que ni idea que són...

Si tengo la estrucura en el .h, al escribirlo en el .cpp se llama sólo? cómo funciona?

Ej:
Tengo GlobalMisery.h y GlobalMisery.cpp

Yo estoy en main.cpp

Si hago un include a GlobalMisery.h, se llama a su vez a GlobalMisery.cpp?

Porque en ese cpp tengo el código de la estructura del .h

El tema de punteros está todo muy lindo, pero con este tema de templates es horrible, yo no lo puedo hacer funcionar :(
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

xaps

Al usar templates has de incluir la implementación desde la cabecera de la clase añadiendo #include "tu_cpp.cpp" al final de tu archivo de cabecera.
Otra opción es la de tener la cabecera y la implementación en el mismo fichero, pero no lo recomiendo si el código es muy extenso.

Saludos
"The programmers of tomorrow are the wizards of the future" - Gave Newel

Miseryk

#4
Traté de hacerlo todo en el .h, pero es una basura, hay cosas que no se pueden pisar, como las variables static (al menos yo no pude, y lo intenté mucho y busqué mucho en internet, todos siguen la lógica de usar el .cpp....)

PERO PUDE LOGRARLO!

Código (cpp) [Seleccionar]

////////////////////////////////////////////////////////////////////////////////
// Filename: GlobalMisery.h
////////////////////////////////////////////////////////////////////////////////
#ifndef _GLOBALMISERY_H_
#define _GLOBALMISERY_H_

////////////////////////////////////////////////////////////////////////////////
// Class name: GlobalMiseryClass
////////////////////////////////////////////////////////////////////////////////
class GlobalMiseryClass
{
public:
static int Mier**;

GlobalMiseryClass();
~GlobalMiseryClass();

template<typename T> static void deleten(T *&ptr)
{
delete ptr;
ptr = 0;
}

template<typename T> static T Suma(T a, T b)
{
return a + b;
}
};

#endif


Código (cpp) [Seleccionar]

////////////////////////////////////////////////////////////////////////////////
// Filename: GlobalMisery.cpp
////////////////////////////////////////////////////////////////////////////////
#include "GlobalMisery.h"

//Necesito esta mier** para que compile...
int GlobalMiseryClass::Mier** = 0;

GlobalMiseryClass::GlobalMiseryClass()
{

}

GlobalMiseryClass::~GlobalMiseryClass()
{

}


Código (cpp) [Seleccionar]

          #include "GlobalMisery.h"

...

        int* a = new int;

GlobalMiseryClass::deleten(a);

GlobalMiseryClass::Mier** = 3;

         int b;
int c;
int d;

b = 1;
c = 2;

d = GlobalMiseryClass::Suma(b, c);


Gracias por el aporte (Y).
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!