C ++ 0x bổ sung hỗ trợ suy luận kiểu khá toàn diện. Tôi rất muốn sử dụng nó ở mọi nơi có thể để tránh sự lặp lại không đáng có, nhưng tôi tự hỏi nếu loại bỏ thông tin loại rõ ràng ở khắp mọi nơi là một ý tưởng tốt. Hãy xem xét ví dụ khá giả tạo này:
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);
}
Bạn sẽ nói điều này là hợp lý, hay nó hoàn toàn vô lý? Xét cho cùng, đặc biệt là nếu bạn đã từng phát triển ngôn ngữ động, bạn thực sự không cần quan tâm nhiều đến các loại điều, và có thể tin tưởng rằng trình biên dịch sẽ nắm bắt được bất kỳ sự lạm dụng nghiêm trọng nào của hệ thống loại. Nhưng đối với những người dựa vào hỗ trợ biên tập viên cho chữ ký phương thức, bạn không gặp may, vì vậy sử dụng phong cách này trong giao diện thư viện có lẽ là một thực tế tồi.
Tôi thấy rằng việc viết mọi thứ với tất cả các kiểu có thể thực sự làm cho mã của tôi dễ theo dõi hơn rất nhiều, bởi vì nó loại bỏ gần như tất cả sự lộn xộn thông thường của C ++. Số dặm của bạn, tất nhiên, có thể khác nhau, và đó là điều tôi quan tâm khi nghe về. Những lợi thế và bất lợi cụ thể để sử dụng triệt để suy luận kiểu là gì?