tôi có thể làm gì để làm cho công việc này:Mẫu tự tham khảo trong Template Đối số
template<class C, class V, Test V::*>
class Test {
};
nó mang lại cho tôi lỗi biên dịch:
unknown type name 'Test'
Đó là một mẫu tự tham khảo cho bây giờ, mà doesn dường như không thể. Những gì có thể có thể được thực hiện để làm cho nó hoạt động?
CHỈNH SỬA:
Đây là những gì tôi cần. Tôi muốn thực hiện một lược đồ quan hệ hai chiều (nghĩ cha-con) với nỗ lực mã hóa tối thiểu.
template <class O, class T, Reference<T, O, Reference O::*> T::* opposite>
class Reference
{
T **data;
int count;
public:
Reference(): data(new T*[N]), count(0) {}
~Reference() {delete[] data;}
Reference &add(T *t) {
handleOtherSide();
return link(t);
}
// a lot of stuff to implement this
};
Đó là lớp thu thập. Dưới đây là làm thế nào nó sẽ được sử dụng:
class Partner
{
public:
Reference<Partner, Address, &Address::partner> addresses;
};
class Address
{
public:
Reference<Address, Partner, &Partner::addresses> partner;
};
Mục tiêu của tôi là phải có tất cả mọi thứ cần thiết cho việc tham khảo để làm việc được cung cấp như mẫu đối số, do đó không có nhu cầu để cung cấp nhà xây dựng cho các lớp học như đối tác và địa chỉ (hiện tại tôi cung cấp con trỏ thành viên đối diện như một hàm tạo arg nhưng điều này đòi hỏi tôi phải có các hàm tạo rõ ràng cho các lớp người tham gia). Tôi cũng cần phải chuyển vào hoặc tính toán con trỏ "chủ sở hữu" cho lớp Tham chiếu. Tôi đã để lại vấn đề này ở đây vì tôi muốn tập trung vào khía cạnh khuôn mẫu tự tham chiếu.
Cách dễ nhất để nghĩ về điều này là tăng :: bimap. Nhưng vấn đề với bimap là tôi không muốn bimap kèm theo nhưng chỉ là phần bên trái và bên phải của nó. bimap cũng không khả thi vì nó sẽ dẫn đến một bimap duy nhất quản lý tất cả các mối quan hệ của một mối quan hệ cụ thể. Nó sẽ có thể chứa một số lượng lớn các đối tượng làm chậm hoạt động trên nó.
Điều này là để làm gì? Nó có thể đơn giản hơn nhiều để thực hiện điều này một số cách khác hơn là tự tham khảo. – Jon
Tôi đã phải upvote câu hỏi này để có được OP off số danh tiếng 666 của mình. –
Mục tiêu mà bạn đang cố gắng đạt được với một mẫu đệ quy như thế nào, nếu bạn không ngại tôi hỏi? – dasblinkenlight