Sau khi cố gắng truy cập vào một lớp lưu trữ dễ dàng hơn một chút, tôi đã kết thúc trong một tình huống mà tôi không có nhiều kiến thức. Và, việc tìm kiếm những người đang cố gắng làm điều tương tự như tôi không dễ dàng.C++ Array Subscript Operator Template
Điều tôi đang cố gắng làm là có một lớp lưu trữ một mảng giá trị dưới dạng chuỗi nội bộ, nhưng cho phép nhập kiểu đơn giản từ đầu của người dùng. Những gì tôi đã lên kế hoạch làm là sử dụng toán tử chỉ số mảng để trả về kiểu nào chúng chỉ định thông qua một khuôn mẫu. Mặc dù, nó âm thanh tốt hơn rất nhiều so với nó hoạt động trong thực tế. Dưới đây là một ví dụ đơn giản về những gì tôi đang làm, để cung cấp cho bạn ý tưởng về cách hoạt động của nó nên.
class StringList
{
public:
template <typename T>
T operator[](const int i)
}
Từ đó, tôi sẽ xác định một vài mẫu cụ thể và bất kỳ người dùng nào cũng có thể dễ dàng xác định thêm nếu cần. Nhưng, vấn đề lớn nhất với điều này là, tôi không biết làm thế nào để gọi toán tử subscript với một mẫu. Lúc đầu, tôi giả định sau đây (mà dường như là không chính xác), xem xét nó tương tự như cách tiêu chuẩn gọi một phương pháp mẫu.
StringList list;
T var = list<T>[0];
Có ai biết cách thích gọi các nhà điều hành subscript làm mẫu không? Hoặc, tôi nên tránh làm điều này, và sử dụng một phương pháp được đặt tên?
Tôi sẽ cảnh báo chống lại quá tải 'toán tử []' cho mục đích này khi toán tử quá tải được sử dụng tốt nhất khi chúng có ý nghĩa cú pháp. Bạn thường không viết những thứ như 'danh sách [0]', và tôi nghĩ rằng chi phí trí tuệ bổ sung không đáng giá. Tại sao không chỉ tạo một phương thức 'get' và gọi' list.get (0) '? –
templatetypedef
@templatetypedef Tôi đồng ý hoàn toàn. Tôi đã nhiều hơn khả năng sẽ chỉ dính vào một chức năng được đặt tên như có được, xem xét tôi thậm chí không hiểu làm thế nào bạn sẽ viết một mẫu như thế này. Nhưng, tôi tò mò muốn biết nó sẽ được viết như thế nào, bất kể tôi có cần sử dụng nó hay không. – TheCodeBroski