Estoy tratando de aprender las características actualmente aceptadas de C++ 11 y estoy teniendo problemas con auto y decltype. Como ejercicio de aprendizaje, extiendo la lista de clase estándar con algunas funciones genéricas.Usando auto y decltype en 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; });
Para el mapa miembro Quiero el tipo de retorno para ser genérica dependiendo de lo que los rendimientos función pasada. Entonces, para el tipo de devolución, podría hacer algo como esto.
auto map(const function<float (_Ty)>& f) -> FList<decltype(f(_Ty))>*
Esto también necesitaría eliminar el tipo de flotador en la plantilla de función.
auto map(const function<auto (_Ty)>& f) -> FList<decltype(f(_Ty))>*
que podría utilizar una clase de plantilla, sino que hace que el uso de las instancias más detallado ya que tengo que especificar el tipo de retorno.
template<class T> FList<T>* map(const function<T (_Ty)>& f)
a la suma de mi pregunta que estoy tratando de encontrar la manera de definir un mapa sin necesidad de utilizar una clase de plantilla y aún así tener que genérica en el tipo que devuelve.
Estoy tratando de aprender a usar auto y decltype sin preguntar sobre las mejores prácticas. – gradbot
Sí, pero hay muchas otras cosas de las que probablemente también te beneficiarías si tuvieras conocimiento. Estaba en un viaje en tren antes, así que me interrumpieron antes de llegar al tema del tipo declintivo. Actualizado ahora. –
Awesome gracias! – gradbot