2010-06-18 30 views
10

Giống như trong các vùng chứa stl, tại sao chúng ta không thể truy cập một typedef bên trong lớp từ cá thể lớp? Có một cái nhìn sâu sắc cụ thể về điều này?Truy cập typedef từ cá thể


Khi value_type là một tham số mẫu nó có thể giúp làm cho mã tổng quát hơn nếu không có nhu cầu để xác định các thông số mẫu như trong vector :: value_type

Ví dụ:

class T { 
public: 
    typedef int value_type; 
    value_type i; 
}; 

T t; 
T::value_type i; // ok 
t.value_type i; // won't work 

Trả lời

5

Bởi vì typedef chỉ là một từ đồng nghĩa cho một loại khác. Nó không phải là một đối tượng (thành viên của lớp).

Và như @Neil Butterworth đã đề cập: "Vì toán tử. Là toán tử truy cập thành viên".

+0

Và vì. toán tử là toán tử truy cập _member_. –

+0

@Neil Butterworth: Cảm ơn :) – sinek

0

Không có lý do chính đáng để sử dụng toán tử khác để giải quyết phạm vi (::) so với quyền truy cập thành viên (.) vì không bao giờ mơ hồ. Đó là một sự khó chịu, nhưng nó chỉ là cách ngôn ngữ.


Một số ngôn ngữ khác nhau làm điều đó mặc dù ...

  • C# sử dụng . thay vì ::, nhưng bạn vẫn cần phải sử dụng tên lớp khi truy cập vào các loại lồng nhau và các thành viên tĩnh.
  • D sử dụng .<instance>.<static nested type> tương đương với <type>.<static nested type>.
+0

Nó không chỉ là nhà điều hành khác nhau. '::' được gọi trên kiểu, trong khi '.' được gọi trên cá thể. Nhưng vẫn còn, tôi cũng không thể thấy lý do tốt để không sử dụng như vậy. –

Các vấn đề liên quan