Plantilla typedefs – ¿Cuál es su trabajo?

C ++ 0x tiene alias de plantilla (a veces referidos como template typedefs). Mira aquí . La especificación actual de C ++ no.

¿Qué te gusta usar mientras trabajas? ¿Objetos contenedores o macros? ¿Sientes que vale la pena?

    ¿Qué te gusta usar mientras trabajas? ¿Objetos contenedores o macros? ¿Sientes que vale la pena?

    La forma canónica es usar una metafunción como esta:

    template  struct my_string_map { typedef std::map type; }; // Invoke: my_string_map::type my_str_int_map; 

    Esto también se usa en STL ( allocator::rebind ) y en muchas bibliotecas, incluido Boost. Lo usamos ampliamente en una biblioteca bioinformática .

    Está hinchado, pero es la mejor alternativa el 99% del tiempo. Usar macros aquí no vale las muchas desventajas.

    (EDITAR: He modificado el código para que refleje las convenciones de Boost / STL según lo señala Daniel en su comentario).

     template  struct my_string_map : public std::map { }; 

    No debe heredar de las clases que no tienen un destructor virtual. Está relacionado con los destructores en las clases derivadas que no se llaman cuando deberían estar y usted podría terminar con la memoria no asignada.

    Dicho esto, podría ***** probablemente ***** salirse con la suya en la instancia anterior porque no está agregando más datos a su tipo derivado. Tenga en cuenta que esto no es un endoso. Todavía te aconsejo que no lo hagas. El hecho de que puedas hacerlo no significa que debas hacerlo .

    EDITAR: Sí, esta es una respuesta a la publicación de ShaChris23. Probablemente me perdí algo porque apareció arriba de su mensaje en lugar de debajo.

    A veces puedes escribir explícitamente los typedefs no formulados para todos los tipos necesarios. Si la clase base está modelada en múltiples argumentos de plantilla con solo un tipo que desea ser typedefed, puede heredar una clase especializada con typedef efectivamente incluida en el nombre de clase heredado. Este enfoque es menos abstruso que el enfoque de metafunción.