Tôi đang cố gắng tách một số mã khỏi phần mềm mô phỏng C++ của tôi thành một thư viện, vì vậy nó có thể được sử dụng linh hoạt hơn. Mô phỏng dựa trên Lattice
, bao gồm một số Node
s chứa danh sách các con trỏ tới số Neighbor
s của chúng. . Mặc dù các nước láng giềng cũng được các nút, tôi muốn có một chút lớp bao bọc xung quanh con trỏ *Node
để thực hiện thêm logic/lĩnh vực (ví dụ, bool is_neares_neighbor
hoặc lâu hơnMẫu C++ nào để sử dụng cho thư viện cho phép mở rộng các lớp của nó?
kiến trúc lớp của tôi do đó trông giống như sau:
class Lattice {
private:
vector<Node> _nodes;
};
class Node {
private:
vector<Neighbor> _neighbors;
};
class Neighbor {
private:
Node * _node;
};
cho đến nay, như vậy tốt. Bây giờ, tôi muốn thư viện của tôi để xử lý tất cả các logic mạng liên quan đến, nhưng không có gì khác. Tuy nhiên, khi sử dụng thư viện trong một số dự án, ba lớp (Lattice
, Node
, Neighbor
) sẽ mang nhiều logic và trường hơn, do đó người dùng có thể kế thừa từ các lớp này và thực hiện tùy chỉnh của mình công cụ, trong khi thư viện vẫn xử lý tất cả logic liên quan đến mạng tinh thể cần thiết.
Cách được khuyến nghị để làm điều đó là gì? Các mẫu có phù hợp ở đây không? Trong một tình huống templated, hệ thống cấp bậc lớp học của tôi sẽ trông như thế này:
template<class N>
class Lattice {
private:
vector<N> _nodes;
};
template<class NN>
class Node {
private:
vector<NN> _neighbors;
};
template<class N>
class Neighbor {
private:
N * _node;
};
Như bạn có thể thấy, cả hai Node
và Neighbor
cần phải biết loại lẫn nhau, đó là một điều kiện tròn Tôi không có ý tưởng làm thế nào để đối phó với Đây. Ngoài ra, toàn bộ thư viện sẽ phải sống trong các tệp tiêu đề.
Các tình huống như thế nào được xử lý trong thế giới C++ theo cách thanh lịch nhất?
N và NN là gì? Tôi nghĩ rằng tôi có một giải pháp cho câu hỏi như được hỏi, mặc dù tôi vẫn sẽ có một số mối quan tâm về con trỏ nguyên đến nút bên trong hàng xóm. –
Các loại Node và Neighbor có thực sự hoàn toàn độc lập với nhau không? Không phải một loại Node cụ thể ngụ ý một loại hàng xóm cụ thể? Tôi sẽ tưởng tượng Node và Neighbor là các lớp trừu tượng (các giao diện) và lấy các nút và hàng xóm cụ thể từ chúng. Nhưng có lẽ tôi đã nhận được yêu cầu của bạn sai. –
Xin chào, cảm ơn cả hai vì đã trả lời. @KennyOstrom: N và NN là các lớp bắt nguồn từ 'Node' và' Neighbor', tương ứng, được cung cấp bởi người dùng. Vì vậy, người dùng có thể thêm các hàm và biến vào cả lớp 'Node' và' Neighbor'. @FrankPuffer: Chúng không phụ thuộc. Rất nhiều thông tin meta có thể tồn tại trong một mối quan hệ giữa hai 'Node', giống như các bộ đếm, v.v. Nó giống như mối quan hệ 1: n, nơi có thể lưu thêm thông tin về mối quan hệ. Tuy nhiên, đây có lẽ là phần tôi có thể dễ dàng nhất, nếu không có giải pháp nào khác. Tôi chỉ muốn làm cho nó rất linh hoạt. – janoliver