C'è, all'interno della libreria standard o Boost, una sorta di classe di base di utilità per popolare una sequenza STL compatibile con i typedef richiesti (size_type, value_type, ecc ...). Sto pensando a qualcosa come boost::iterator_facade, ma per i contenitori.Tipologie di piastre per contenitore compatibile STL
Stavo per arrotolare il mio, ma volevo assicurarmi che una cosa del genere non esistesse già.
UPDATE:
Questa è la classe base di utilità mi è venuta, in caso qualcuno lo trova utile:
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 semplicemente "Echoes" i typedef nidificati del contenitore sottostante di un contenitore personalizzato. Non c'è niente, davvero.
Le persone usano value_type e iterator perché è più semplice delle alternative, ma io di solito uso value_type & invece di riferimento, ad esempio (e vector è male). Sei sicuro che fornire quegli altri typedef annidati sia vantaggioso per te? Normalmente passo gli elementi alle funzioni in cui verranno associati come cost e comunque, e quel typ_ef_reg_rid_registrato non viene mai toccato. –
@Fred: sono solo preoccupato che il mio contenitore sia compatibile con cose come BOOST_FOREACH, intervalli di boost, std :: back_insertion_iterator, ecc. Se devo solo fornire un sottoinsieme minimo di tutti i typedefs, mi piacerebbe sapere quale. Suppongo sia abbastanza facile sperimentare e scoprire. –
Vero, ma le utilità generali di solito sono scritte per essere agnostiche; 0x auto è ottimo per questo. :) –