Ho una classe comeChiamando il metodo di conteggio di std :: set di puntatori con const tipo di riferimento chiave
struct S {
bool foo(const AType& v) const {
return values.count(&v); // compile error due to the constness of v
}
private:
std::set<AType*> values;
};
Questa è una versione semplificata. Nel codice reale, foo fa alcune cose complesse. Il codice genera un errore
invalid conversion from ‘const AType*’ to ‘std::set<AType*>::key_type {aka AType*}’
ritengo foo dovrebbe prendere 'const AType & v' perché non muta v. Il tipo di variabile membro 'valori' non può essere impostata std :: < const AType * > perché alcuni metodi della struct chiamano metodi non const degli elementi contenuti in 'valori'. Posso lanciare costanza di 'v' lontano:
bool foo(const AType& v) const {
return values.count((AType*) &v);
}
ma penso che questo non può essere una buona soluzione in generale. Quale soluzione potrei avere?
non vedo alcun danno nel usando 'values.count (const_cast (&v));' dal momento che si sta per confrontare solo i puntatori. –
come al solito puntatore fastidio una T const '*' non è convertibile a 'T * const? e viceversa. –
Sei sicuro di voler contare con i puntatori ma non il valore dell'oggetto? – mirt