[C con Clase] operador global de modelado (conversion de tipos)
Steven Davidson
srd4121 en njit.edu
Jue Oct 16 19:46:58 CEST 2008
Hola Pedro,
Pedro Mateo wrote:
>
> tengo esta funcion
> void funcionX(Clase* b){
> }
>
> pero quiero llamarta de esta manera
>
> functionX(123)
> para que tal operacion pueda ser compilada tengo creo que seria
> necesaria sobrecargar un operador global de modelado (o conversion)
> que el compilador pueda utilizar para resolver la conversion de un
> int a un Clase*
>
> es posible?
> como lo se haria?
>
No es posible crear una conversión de esta manera. Las conversiones
personalizadas sólo se pueden hacer dentro de una clase. Por ejemplo,
class A
{
private:
int num;
public:
...
operator int() { return 5+num; }
};
Ahora podemos convertir de un objeto 'A' a un entero. Por ejemplo,
void func( int n )
{
cout << n;
}
int main()
{
A obj(10);
func( obj );
cout << endl;
...
}
En tu caso, quieres convertir de 'int' a 'Clase *'. Obviamente, no
existe tal conversión en la gramática de C++. Sinceramente, no estoy
seguro de cómo sería la conversión que quieres implementar, pero sugiero
sobrecargar la función 'funcionX()'. Por ejemplo,
void funcionX( Clase* b );
void funcionX( int n );
Supongo que podrías crear otra clase intermediaria donde implementar la
conversión. Por ejemplo,
class Clase { ... };
class Temp
{
public:
int num;
Temp( int n ) : num(n) {}
// Haz la conversión de 'int' a 'Clase *'
operator Clase *() { ... }
};
Y luego al usar esta clase, haríamos esto:
funcionX( Temp(123) );
Los pasos que hacemos son:
1. Instanciar un objeto temporal de 'Temp': Convertir de 'int' a 'Temp'.
2. Convertir de 'Temp' a 'Clase *'
3. Invocar 'funcionX()' con un 'Clase *' como argumento.
Espero que esto te ayude.
Steven
Más información sobre la lista de distribución Cconclase