2010-02-01 20 views

Respuesta

16

Depende. Si desea que A<C> y B sean tipos distintos pero relacionados, B debe extenderse A<C>. Si desea que sean idénticos, debe usar un typedef. ¿Puedes proporcionar más contexto?

+0

Debe mencionarse que el typedef no puede predecirse. Por lo tanto, prefiero la herencia. – user877329

4

Depende de lo que desee. Si usa sus diferentes clases para personalizar su meta programación de plantillas, es mejor crear B.

Si usa la herencia solo para reducir el tipeo, que no es una solución adecuada y debe ir con typedef, se introdujeron para eso.

2

Definitivamente, si la intención es dar un nuevo nombre a un tipo de datos existente, entonces use un typedef.

1

Bueno, supongo que está utilizando la clase vacía para salir de escribir A<C> repetidamente. En ese caso, creo que un typedef es una mejor idea. Al menos, esa parece ser la forma en que se hace con más frecuencia.

Déjenme agregar que esta es solo mi opinión. La gente no está totalmente de acuerdo con el uso de typedef en general. Aunque creo que está bastante bien en este caso.

Después de leer la respuesta de Jon Purdy, me gustaría agregar que debe usar la herencia si necesita extender A y no lo hace de otra manera.

1

Depende de lo que quieras, el efecto no es el mismo.

C++ typedefs no son "fuertes", lo que básicamente significa que B y A<C> serán del mismo tipo. Si desea ser capaz de distinguir entre los dos, use una clase.

Varias implementaciones de typedef fuerte se pueden encontrar en la web, por ejemplo, the boost one.

2

No es exactamente lo mismo. Por ejemplo, con typedef se puede hacer esto:

typedef A<C> B; 
func(B param) {...} 
... 
A<C> var; 
func(var); 
0

Para completar quiero añadir otro punto: Con

class B : public A<C> { }; 

usted puede fácilmente declarar hacia adelante B:

class B; 
void func(B param);