C ++ 0x bietet eine verdammt umfassende Unterstützung für Typinferenzen. Ich bin sehr versucht, es überall zu verwenden, um unnötige Wiederholungen zu vermeiden, aber ich frage mich, ob das Entfernen expliziter Typinformationen überall eine so gute Idee ist. Betrachten Sie dieses ziemlich erfundene Beispiel:
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);
}
Würden Sie sagen, dass dies vernünftig ist oder ist es völlig lächerlich? Schließlich, vor allem , wenn Sie es gewohnt sind in einer dynamischen Sprache zu entwickeln, müssen Sie nicht wirklich brauchen vertrauen , dass alle viel über die Arten der Dinge, und kann zu sorgen , dass der Compiler keine ungeheuerlichen Missbrauch des Typsystems fangen. Aber für diejenigen unter Ihnen, die auf die Unterstützung von Editoren für Methodensignaturen angewiesen sind, haben Sie kein Glück. Daher ist die Verwendung dieses Stils in einer Bibliotheksschnittstelle wahrscheinlich eine schlechte Praxis.
Ich finde, dass das Schreiben von Dingen mit allen möglichen impliziten Typen es mir tatsächlich viel einfacher macht, meinem Code zu folgen, da dadurch fast die gesamte übliche Unordnung von C ++ beseitigt wird. Ihr Kilometerstand kann natürlich variieren, und das ist es, worüber ich gerne hören möchte. Was sind die spezifischen Vor- und Nachteile einer radikalen Verwendung der Typinferenz?