Sto cercando di imparare le funzionalità attualmente accettate di C++ 11 e ho problemi con auto e decltype. Come esercizio di apprendimento sto estendendo l'elenco delle classi std con alcune funzioni generiche.Utilizzo di auto e decltype in C++ 11
template<class _Ty, class _Ax = allocator<_Ty>>
class FList : public std::list<_Ty, _Ax>
{
public:
void iter(const function<void (_Ty)>& f)
{
for_each(begin(), end(), f);
}
auto map(const function<float (_Ty)>& f) -> FList<float>*
{
auto temp = new FList<float>();
for (auto i = begin(); i != end(); i++)
temp->push_back(f(*i));
return temp;
}
};
auto *ints = new FList<int>();
ints->push_back(2);
ints->iter([](int i) { cout << i; });
auto *floats = ints->map([](int i) { return (float)i; });
floats->iter([](float i) { cout << i; });
Per la mappa membro voglio il tipo di ritorno per essere generico seconda di cosa la funzione ritorna passati. Quindi per il tipo di ritorno potrei fare qualcosa di simile.
auto map(const function<float (_Ty)>& f) -> FList<decltype(f(_Ty))>*
Questo dovrebbe anche rimuovere il tipo float nel modello di funzione.
auto map(const function<auto (_Ty)>& f) -> FList<decltype(f(_Ty))>*
ho potuto utilizzare una classe template, ma che rende l'utilizzo di istanze più prolisso dal momento che ho per specificare il tipo di ritorno.
template<class T> FList<T>* map(const function<T (_Ty)>& f)
Riassumendo della mia domanda sto cercando di capire come definire mappa senza utilizzare una classe template e hanno ancora generica nel tipo restituisce.
sto cercando di imparare come usare auto e decltype non chiedendo le migliori pratiche. – gradbot
Sì, ma c'è un sacco di altre cose che probabilmente trarrai beneficio dalla conoscenza. Ero in viaggio prima di treno quindi sono stato interrotto prima che arrivassi alla roba in declino. Aggiornato ora. –
Grazie fantastici! – gradbot