Che cosa posso fare per fare questo lavoro:autoreferenziale Template in argomento di un template
template<class C, class V, Test V::*>
class Test {
};
mi dà errore di compilazione:
unknown type name 'Test'
Si tratta di un modello autoreferenziale, per ora, che doesn sembra possibile Cosa potrebbe essere fatto per farlo funzionare?
EDIT:
Ecco quello che avevo bisogno di questo per. Voglio implementare uno schema di relazione bidirezionale (pensa genitore-figlio) con il minimo sforzo di codifica.
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
};
Questa è la classe di raccolta. Ecco come sarebbe essere utilizzato:
class Partner
{
public:
Reference<Partner, Address, &Address::partner> addresses;
};
class Address
{
public:
Reference<Address, Partner, &Partner::addresses> partner;
};
Il mio obiettivo è quello di avere tutto il necessario per riferimento al lavoro essere fornito come argomento di un template, in modo che non v'è alcuna necessità di fornire costruttori di classi come Partner e Indirizzo (attualmente fornisco il puntatore membro opposto come argomento costruttore, ma ciò richiede che io abbia costruttori espliciti per le classi partecipanti). Avrei anche bisogno di passare o calcolare un puntatore "proprietario" alla classe Reference. Ho lasciato questo problema qui perché voglio concentrarmi sull'aspetto del modello autoreferenziale.
Il modo più semplice per pensarci è boost :: bimap. Ma il problema con bimap è che non voglio il bimap che racchiude, ma solo la parte sinistra e destra di esso. anche il bimap non è fattibile perché porterebbe a un singolo bimap che gestisce tutte le associazioni di una relazione specifica. Potrebbe contenere un gran numero di oggetti che rallentano le operazioni su di esso.
A cosa serve? Probabilmente è molto più semplice implementarlo in modo diverso dall'autoreferenziazione. – Jon
Ho dovuto forzare questa domanda per togliere l'OP dal suo conteggio della reputazione 666. –
Qual è l'obiettivo che stai cercando di ottenere con un modello ricorsivo, se non ti dispiace chiederlo? – dasblinkenlight