나는이 일하기 위해 할 수있는 일 : 아무튼있는자체 참조 템플릿
unknown type name 'Test'
그것은 지금 자체 참조 템플릿 : 그것은 나에게 컴파일러 오류를 제공
template<class C, class V, Test V::*>
class Test {
};
을 가능한 것처럼 보입니다. 작동하게하려면 무엇을 할 수 있습니까?
편집 :
다음은 내가 필요한 것입니다. 최소한의 코딩 노력으로 양방향 (부모 - 자식 생각) 관계 스키마를 구현하고 싶습니다.
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
};
이것이 컬렉션 클래스입니다. 여기가 사용되는 방법은 다음과 같습니다
class Partner
{
public:
Reference<Partner, Address, &Address::partner> addresses;
};
class Address
{
public:
Reference<Address, Partner, &Partner::addresses> partner;
};
내 목표는 참조 파트너 및 주소 (현재 I가 제공하는 같은 클래스에 대한 생성자를 제공 할 필요가 없도록, 템플릿 인수로 제공 할 작동하는 데 필요한 모든 것을 가지고있다 생성자 arg로 반대 멤버 포인터하지만 이것은 참가자 클래스에 대한 명시 적 생성자가 필요합니다. Reference 클래스에 대한 "owner"포인터를 전달하거나 계산해야합니다. 내가 self-referencing 템플릿 측면에 초점을 맞추기 때문에이 문제를 여기에 남겼다.
이것을 생각하는 가장 쉬운 방법은 boost :: bimap입니다. 그러나 bimap의 문제점은 내가 묶는 bimap이 아니라 왼쪽과 오른쪽 부분을 원한다는 것입니다. bimap은 특정 관계의 모든 연관을 관리하는 하나의 bimap으로 이어지기 때문에 가능하지도 않습니다. 그것은 아마도 그것의 작업을 느리게하는 많은 수의 객체를 보유 할 것입니다.
이것은 무엇입니까? 자체 참조보다이 방법을 구현하는 것이 훨씬 간단합니다. – Jon
666 명의 평판 카운트에서 OP를 얻으려면이 질문을 업 보류해야했습니다. –
내가 재귀 템플릿을 사용하여 달성하고자하는 목표는 무엇입니까? – dasblinkenlight