2014-09-08 15 views
8

Trong thiết kế của tôi, tôi có một lớp mà chủ yếu là một mặt trước cho một std::vector<OtherClass>. Tôi có nên, trong giao diện lớp học của tôi, bàn giao cho bất kỳ người gọi nào std::iterator, giao một tham chiếu đến toàn bộ vector hoặc cung cấp một tập hợp các chức năng để truy cập nội dung của vector của tôi? Hoặc tiếp cận hoàn toàn khác biệt?Lớp học của tôi chủ yếu là mặt tiền cho một thùng chứa, tôi có nên để lộ sự kiện này không?

Thông tin khác: Các phần tử trong vùng chứa sẽ được thiết lập trong khi khởi tạo và sẽ không được thêm vào khi chương trình đang chạy bình thường. Các khách hàng của lớp của tôi thường sẽ thực hiện các truy vấn và sửa đổi trạng thái của các phần tử OtherClass, mặc dù không theo thời gian quan trọng.

+0

Cân nhắc sử dụng các hàm miễn phí chấp nhận 'std :: vector' thay vì các thành viên của lớp trình bao bọc. – erenon

+3

Đây là ứng dụng rất cụ thể. Iterator có thể hoạt động, nhưng nếu bạn liên tục thêm vào vector thì sao? Các bộ lặp sẽ bị vô hiệu khi vector phân bổ lại. Hãy cung cấp thêm thông tin cho chúng tôi! – Conduit

+0

Nếu 'OtherClass' là hằng số, tại sao không chuyên? – Nelfeal

Trả lời

1

Bạn nên tạo các hàm để sửa đổi vectơ trong nội bộ. Đây là lý do tại sao:

Tùy thuộc vào trình biên dịch, bạn có thể đang chạy các phiên bản khác nhau của STL (Thư viện mẫu chuẩn), có thể gây ra các sự cố không mong muốn, giả sử chúng có thể thay đổi cách std :: vector hoạt động từ khi bạn xây dựng nó phiên bản cũ hơn (hoặc mới hơn) của thư viện và gửi nó đi.

Tuy nhiên, tôi đoán đây không phải là thư viện hoặc dự án có khả năng được sử dụng với trình biên dịch khác. Bạn được an toàn để gửi một tham chiếu hoặc con trỏ tới vector miễn là bạn chạy và biên dịch với cùng một phiên bản STL.

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