2010-09-19 27 views
9

Chúng ta có thể có một lớp cục bộ được định nghĩa bên trong một hàm nhưng lớp này không thể là một khuôn mẫu có chút khó chịu và không nhất quán. Có bản cập nhật nào trong tiêu chuẩn C++ 0x không?Mẫu lớp địa phương

Trả lời

7

Có. Trên thực tế, sự thay đổi quy tắc này là điều làm cho các biểu thức Lambda có thể xảy ra vì biểu thức Lambda tạo ra một kiểu không tên địa phương.

Xin lỗi, tôi đã đọc sai câu hỏi của bạn. Tôi nghĩ bạn đang nói về việc sử dụng một lớp địa phương như là tham số mẫu. Điều này không được phép trong C++ 98 và C++ 03 nhưng nó sẽ hoạt động trong C++ 0x.

Đối với câu hỏi thực tế của bạn, C++ 0x sẽ không thay đổi bất kỳ điều nào trong số này.

Tôi thành thật không thấy lý do nào để cho phép "mẫu lớp địa phương có chức năng". Sự hỗ trợ cho "các mẫu lớp địa phương hàm" là một tính năng mà có lẽ chỉ một số ít người quan tâm. Và viết các mẫu lớp bên ngoài các hàm là một sự thay thế có thể chấp nhận được cho việc này. Điều này rõ ràng là không đặt đủ áp lực lên các nhà cung cấp trình biên dịch cho dù phức tạp như thế nào là thực hiện một tính năng như vậy. Các nhà cung cấp trình biên dịch có thể quan tâm nhiều hơn đến việc triển khai các tính năng C++ 0x khác.

Nhưng tôi hiểu ý của bạn. Nó có vẻ như một sự bất thường không cần thiết của ngôn ngữ. Nếu bạn quan tâm sâu sắc đến tính năng này, bạn có thể viết một đề xuất chính thức và gửi nó đến ủy ban tiêu chuẩn hóa C++ trong khoảng hai năm khi họ có khả năng chấp nhận các đề xuất cho "C++ 1y".

+13

Ngược lại, tôi không thấy lý do để không cho phép lớp mẫu cục bộ. Tôi không có ý tưởng tại sao điều này bị vô hiệu hóa trong tiêu chuẩn C++ – valdo

+0

@ valdo: có bao giờ bạn viết một trình biên dịch? hoặc duyệt mã của trình biên dịch? Từ một điểm khả dụng, nó có thể là tốt đẹp, nhưng từ quan điểm của một nhà biên dịch, nó bổ sung thêm một số lượng phức tạp về độ phức tạp cho một chức năng thích hợp: nó không đáng giá. –

+0

@ Matthieu M: Có thể sẽ không khó nếu bạn thiết kế nó từ đầu, nhưng về cơ bản đây là một vấn đề di sản. Phạm vi chức năng đến từ C và mã có khả năng độc lập với các không gian tên. Nhưng nếu bạn đã thực hiện các chức năng như một loại không gian tên, các tính năng như vậy sẽ đến miễn phí. – MSalters

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