Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: josue9243 en 3 Noviembre 2017, 17:41 PM

Título: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: josue9243 en 3 Noviembre 2017, 17:41 PM
Como hago tipo, pongo en .h esto:


int Function( int a )
{
         return a+5;
}


y Cada vez que lo utilize en un .cpp o en cualquier lado se cree una funcion con eso.

PERO NO INSERTARLO CORTE INLINE, sino que como que copia la funcion y la clona SÓLO PARA ESE USO EJEMPLO:


int roberto( int hola, int param )
{
          int a, b, c, d (?
          Function( 4 );
         blabla...
          Function( a + 10 );
}


y para cada vez que uso Function se clona sólo para ese uso en este caso se clona 2 veces.

Habia un XorStr de 007 Boy Scout que hacia eso con xorstr.
Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: ivancea96 en 4 Noviembre 2017, 00:00 AM
La idea de una función es reutilizarla. ¿Por qué "clonarla"?
¿Hablas de tener otra función en memoria idéntica por cada uso?

¿Por qué necesitas esto?
Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: josue9243 en 4 Noviembre 2017, 00:45 AM
Cita de: ivancea96 en  4 Noviembre 2017, 00:00 AM
La idea de una función es reutilizarla. ¿Por qué "clonarla"?
¿Hablas de tener otra función en memoria idéntica por cada uso?

¿Por qué necesitas esto?

¿Porque tanta curiosidad? :v jajaja

Necesito eso porque si en IDA Pro algun vivo me reemplaza

sub_12933942 por CortarPapas();

se reemplaza en TODO el programa, entonces si hago que CortarPapas(); cada vez que lo utilizo se duplique clone o como quieran decirle.

entonces aparece

sub_239429349
sub_283474574
sub_192392939

:p xD
Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: CalgaryCorpus en 4 Noviembre 2017, 10:56 AM
Se me ocurre una manera de hacerlo, pero no es tan directo como llegar e invocar una funcion. En C++, los templates generan codigo y cada especializacion es codigo distinto.
De esta manera, basta que uses una especializacion cada vez que invocas la funcion.

Ejemplo:
Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;

template <int N> void myfunc1() {  cout << N << endl; }

template <int N> void myfunc2() {  cout << "No me importa el valor de N" << endl;  }

int main()
{
    // Invocar una funcion a la que le interesa usar el valor explicito
    // todas las funciones son distintas
    myfunc1<1>();
    myfunc1<456>();
   
    // Invocar una funcion en que el parametro del template se ignora
    myfunc2<1234>();

    return 0;
}


Puedes ver este codigo ejecutandose en este link:  http://goo.gl/x3aJ9X

No puedes usar variables como parametro de la especializacion. Solo constantes explicitas.

Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: josue9243 en 4 Noviembre 2017, 15:23 PM
Jajaja si es igual que el otro código, y si se pueden usar parametros porque el XorStr del otro lo utiliza xD.

XorStr< int a1, int a2, int a3>XorStr( string );
Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: CalgaryCorpus en 4 Noviembre 2017, 16:16 PM
No dije que no se pueden usar parámetros.
Dije que no se pueden usar variables como parámetros de la especialización.

Vale decir, no puedes usar

mifunc<i>()

Solo puedes usar constantes, como en el ejemplo que mande

Yo no tengo a la vista el xorstr que mencionas.
Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: josue9243 en 4 Noviembre 2017, 16:19 PM
Gracias!, funciona d10.