Mam klasy jakWywołanie metody zliczania std :: zestaw wskaźników z kluczowego const odniesienia typu
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;
};
Jest to uproszczona wersja. W prawdziwym kodzie, foo robi pewne skomplikowane rzeczy. Kod produkuje błąd
invalid conversion from ‘const AType*’ to ‘std::set<AType*>::key_type {aka AType*}’
myślę foo powinno „const Atype & v”, ponieważ nie mutują v. typ zmiennej składowej „wartości” nie można std :: set < const AType * > ponieważ niektóre metody struktury S nazywają niestałe metody elementów zawartych w "wartościach". mogę rzucić constness od „v” z dala:
bool foo(const AType& v) const {
return values.count((AType*) &v);
}
Ale myślę, że to może nie być dobrym rozwiązaniem w ogóle. Jakie rozwiązanie mogę mieć?
Nie widzę nic złego w korzystaniu z 'values.count (const_cast (&v));' skoro masz zamiar porównać tylko wskazówki. –
samo jak zwykle wskaźnik irytacji w '*' const T nie jest zamienny do 't * const i vice versa –
Czy jesteś pewien, że chcesz policzyć po wskaźnikach, ale nie o wartości obiektu? – mirt