C ++ 0x agrega un soporte de inferencia de tipos bastante completo. Estoy muy tentado a usarlo en todos los lugares posibles para evitar una repetición indebida, pero me pregunto si eliminar la información de tipo explícita en todo el lugar es una buena idea. Considere este ejemplo bastante artificial:
Foo.h
:
#include <set>
class Foo {
private:
static std::set<Foo*> instances;
public:
Foo();
~Foo();
// What does it return? Who cares! Just forward it!
static decltype(instances.begin()) begin() {
return instances.begin();
}
static decltype(instances.end()) end() {
return instances.end();
}
};
Foo.cpp
:
#include <Foo.h>
#include <Bar.h>
// The type need only be specified in one location!
// But I do have to open the header to find out what it actually is.
decltype(Foo::instances) Foo::instances;
Foo() {
// What is the type of x?
auto x = Bar::get_something();
// What does do_something() return?
auto y = x.do_something(*this);
// Well, it's convertible to bool somehow...
if (!y) throw "a constant, old school";
instances.insert(this);
}
~Foo() {
instances.erase(this);
}
¿Diría que esto es razonable o es completamente ridículo? Después de todo, especialmente si está acostumbrado a desarrollar en un lenguaje dinámico, realmente no necesita preocuparse demasiado por los tipos de cosas, y puede confiar en que el compilador detectará cualquier abuso atroz del sistema de tipos. Pero para aquellos de ustedes que confían en el soporte del editor para las firmas de métodos, no tienen suerte, por lo que usar este estilo en una interfaz de biblioteca es probablemente una práctica realmente mala.
Me parece que escribir cosas con todos los tipos posibles implícitos en realidad hace que mi código sea mucho más fácil de seguir para mí, porque elimina casi todo el desorden habitual de C ++. Su kilometraje puede, por supuesto, variar, y eso es lo que me interesa saber. ¿Cuáles son las ventajas y desventajas específicas del uso radical de la inferencia de tipos?