Ben bu işi yapmak için ne yapabilir: etmiyor ki,Kendine referans Şablon
unknown type name 'Test'
Şimdilik kendine referans şablon: bu bana derleyici hata veriyor
template<class C, class V, Test V::*>
class Test {
};
Mümkün değil. Çalışması için ne yapılabilir?
DÜZENLEME:
İşte bu ihtiyaç yapardım. En az minimum kodlama çabasıyla iki yönlü (düşün ebeveyn-çocuk) ilişki şemasını uygulamak istiyorum.
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
};
Bu koleksiyon sınıfıdır. Burada kullanılacak gibi olacaktır:
class Partner
{
public:
Reference<Partner, Address, &Address::partner> addresses;
};
class Address
{
public:
Reference<Address, Partner, &Partner::addresses> partner;
};
Amacım Referans Ortağı ve Adres (şu anda ben tedarik gibi sınıflar için kurucular sağlamak için gerek yoktur, böylece şablon argüman olarak sağlanacak çalışması için gerekli her şeye sahip olmaktır Bir yapıcı arg olarak karşıt üye işaretçisi, ancak bu katılımcı sınıfları için açık yapıcılara sahip olmamı gerektirir). Referans sınıfına bir "sahip" işaretçisini de girmemeli veya hesaplamam gerekir. Bu problemi burada bıraktım çünkü kendi kendini referanslayan şablona odaklanmak istiyorum.
Bunu düşünmenin en kolay yolu, destek olur: bimap. Ama bimap ile ilgili problem, kapama bimapını istemiyorum ama sadece sol ve sağ kısımları. Bimap da uygun değildir, çünkü belirli bir ilişkinin bütün ilişkilerini yöneten tek bir bimap'a yol açacaktır. Üzerinde işlemlerin yavaşlatılması çok sayıda nesne tutabilir.
Bu ne için? Bunu, kendi kendini referans alandan başka bir şekilde uygulamak çok daha basit. – Jon
Bu soruyu, 666 saygınlık sayımını elde etmek için atmalıydım. –
Böyle bir özyinelemeli şablonla elde etmeye çalıştığınız amaç, sormama neden olursa, nedir? – dasblinkenlight