2010-02-07 10 views
7

Durante dos clases no relacionadas "clase A" y "Clase B" y una funciónC++ conversiones de automóviles

B convert(const A&); 

¿Hay una manera de contar C++ para automáticamente, para cualquier función que toma "clase B" argumento, para auto convertir una "clase A".

Gracias!

+2

Si no puede cambiar las definiciones de clase para la clase A o la clase B, no hay una buena manera de hacerlo. – Omnifarious

Respuesta

10

Lo que normalmente haría en este caso es dar B un constructor que toma un A:

class B 
{ 
public: 
    B(const A&); 
}; 

Y hacer la conversión allí. El compilador dirá "¿Cómo puedo hacer que A a B? Oh, veo que B se puede construir a partir de A".

Otro método es utilizar un operador de conversión:

class A 
{ 
public: 
    operator B(void) const; 
} 

y el compilador va a decir "¿Cómo puedo hacer que me A un B Oh, ya veo A se puede convertir en B?".

Tenga en cuenta que estos son muy fáciles de abusar. Asegúrese de que realmente tenga sentido que estos dos tipos se conviertan implícitamente.

+3

En segundo lugar, la advertencia sobre los operadores de conversión implícita. Durante los últimos diez años, cada vez que tuve la tentación de introducir tal cosa (con la excepción de una clase de cuerda que una vez escribí), tarde o temprano, apareció cuando nadie lo esperaba y, por lo tanto, se eliminó del código: a menudo a un costo considerable. También tenga en cuenta que el compilador siempre invocará exactamente una sola conversión definida por el usuario. Por lo tanto, si también hay una conversión definida por el usuario de 'B' a' C', no puede invocar 'void f (C)' con 'A', ya que eso requeriría dos conversiones. – sbi

1

Puede suministrar un operador de conversión, o un constructor de un parámetro.

Cuestiones relacionadas