Ho visto uno CRTP solution, che ha estratto l'interfaccia nella classe base e ha condiviso solo uno degli argomenti del pacchetto per classe base. Quindi la classe più derivata ha ereditato tutte le classi di base amichevoli e ha implementato l'interfaccia.C'è un modo per specificare tutte le classi in un pacchetto di parametri variadici per essere amico del modello per utilizzare operator =?
Non riesco a utilizzare questo approccio, poiché è necessario proteggere l'operatore di assegnazione, che non è ereditato.
Inoltre, poiché l'operatore di assegnazione ha una firma definita con esattamente un parametro, non è possibile utilizzare uno key pattern.
Questo è quello che mi piacerebbe avere:
template <typename... F>
struct A {
protected:
A& operator=(const SomeClass &other) {
//...
}
private:
//I would like to do the following, but it does not work
friend F...;
}
Esiste un modo per fare quello che sto bisogno?
IDGI. Cosa deve essere un amico di cosa? E perché? Cosa è 'A'? Cos'è 'SomeClass'? Cosa sono 'F ...' in questo esempio? –
@LightnessRacesinOrbit 'A' è auto esplicativo, è una classe con operatore protetto =' attorno al quale sta la mia domanda. 'SomeClass' è solo per completezza sulla firma' operator = '. Si riferisce ad alcune altre classi, non correlate né importanti per questo esempio. 'F ...' è l'argomento del pacchetto di parametri passato al template, che voglio rendere amico a 'A'. Può contenere altre classi non correlate e sconosciuto a 'A', ma dovrebbero avere accesso a' operator = ', come ad altri metodi, che ho estratto usando il pattern di interfaccia di cui ho parlato nella mia domanda. – LoPiTaL
o.O hummmmmmmmm –