¿Qué puedo hacer para que esto funcione:Plantilla referencia a sí misma en un argumento de plantilla
template<class C, class V, Test V::*>
class Test {
};
me da error del compilador:
unknown type name 'Test'
Es una plantilla referencia a sí misma, por ahora, que doesn Parece posible. ¿Qué se podría hacer para que funcione?
EDIT:
Esto es lo que iba a necesitar para este. Quiero implementar un esquema de relación bidireccional (pensar padre-hijo) con el mínimo esfuerzo de codificación mínimo.
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
};
Esa es la clase de recopilación. Así es como se utilizaría:
class Partner
{
public:
Reference<Partner, Address, &Address::partner> addresses;
};
class Address
{
public:
Reference<Address, Partner, &Partner::addresses> partner;
};
Mi objetivo es tener todo lo necesario para referencia al trabajo ser suministrado como parámetro de plantilla, por lo que no hay necesidad de proporcionar a los constructores para las clases como socio y Dirección (actualmente proveo el puntero de miembro opuesto como arg de constructor, pero esto requiere que tenga constructores explícitos para las clases de participante). También necesitaría pasar o calcular un puntero de "propietario" a la clase de referencia. Dejé este problema aquí porque quiero centrarme en el aspecto de la plantilla de autorreferencia.
La manera más fácil de pensar en esto es boost :: bimap. Pero el problema con Bimap es que no quiero el bimap que lo contiene, sino solo la parte izquierda y derecha del mismo. bimap tampoco es factible porque llevaría a una sola bimap que gestione todas las asociaciones de una relación específica. Posiblemente mantendría una gran cantidad de objetos ralentizando las operaciones en él.
¿Para qué es esto? Probablemente sea mucho más simple implementar esto de otra manera que la autorreferencia. – Jon
Tuve que votar esta pregunta para sacar al OP de su 666 recuento de reputación. –
¿Cuál es el objetivo que estás tratando de lograr con una plantilla recursiva, si no te importa que pregunte? – dasblinkenlight