Existe, dentro de la biblioteca estándar o Boost, algún tipo de clase base de utilidad para rellenar una secuencia compatible con STL personalizada con los tipos necesariosde tipo (tipo_edad, tipo_valor, etc.). Estoy pensando en algo como boost::iterator_facade, pero para contenedores.Tipos de letra estándar para contenedor compatible con STL
Iba a enrollar el mío, pero quería asegurarme de que tal cosa no existiera.
ACTUALIZACIÓN:
Ésta es la clase base la utilidad que se me ocurrió, en caso de que alguien le resulta útil:
template <class C>
class ContainerAdapter
{
public:
typedef C::value_type value_type;
typedef C::reference reference;
typedef C::const_reference const_reference;
typedef C::const_iterator iterator;
typedef C::const_iterator const_iterator;
typedef C::difference_type difference_type;
typedef C::size_type size_type;
protected:
typedef C::container_type;
};
// Usage
class MyCustomContainer : public ContainerAdapter< std::vector<int> >
{
...
};
ContainerAdapter simplemente "ecos" los typedefs anidados de contenedor subyacente de un contenedor personalizado. No hay nada para eso, realmente.
La gente usa value_type e iterator porque es más fácil que las alternativas, pero normalmente uso value_type & en lugar de referencia, por ejemplo (y el vector es malo). ¿Estás seguro de que proporcionar esos otros tipos de archivos anidados es una ventaja para ti? Normalmente paso los elementos a las funciones donde estarán ligados como un const y de todos modos, y esa referencia de referencias anidadas typedef nunca se toca. –
@Fred: solo me preocupa que mi contenedor sea compatible con cosas como BOOST_FOREACH, rangos de impulso, std :: back_insertion_iterator, etc. Si solo necesito proporcionar un subconjunto mínimo de todos los typedefs, me gustaría saber cual. Supongo que es bastante fácil experimentar y descubrir. –
Es cierto, pero las utilidades generales generalmente se escriben para ser agnósticas; 0x auto es genial para eso. :) –