I a défini une nouvelle struct
dans c:opérateur Surcharge() pour une nouvelle struct
typedef struct TypedObject {
ObjectType type;
void * value;
} TypedObject;
où TypeObjet est un ENUM:
typedef enum ObjectType {
type_node,
type_int,
type_error,
} ObjectType;
Je voudrais créer un C++ ensemble de TypedObject
pointeurs et à partir des questions précédentes j'ai compris que je dois surcharger operator()
afin de comparer TypedObject
pointeurs insérés dans l'ensemble.
donc je l'ai fait comme suit:
#ifdef __cplusplus
typedef struct {
bool operator() (const TypedObject *lhs, const TypedObject *rhs){
return (lhs->type==rhs->type) && (lhs->value==rhs->value);
}
} ObjComparator;
#endif
On suppose que je définir un ensemble:
std::set<TypedObject *, ObjComparator> mySet;
Vous pouvez supposer que j'utilise un itérateur pour itérer si l'ensemble. Je veux insérer TypedObject x
dans l'ensemble. J'utilise mySet.insert(&x)
pour insérer son adresse .. mais une fois que j'utilise mySet.find(&x)
, il ne parvient pas à trouver x
. L'appel à operator()
est effectué mais la comparaison n'est pas faite comme prévu.
Une idée de ce que le problème pourrait être avec la façon dont j'ai surchargé operator()
? Qu'est-ce que je fais mal? En outre, devrais-je surcharger une version différente de l'opérateur comme < ou ==?
D'accord, alors. Devrais-je comparer les types et les adresses en utilisant l'opérateur – baronzo1
@ baronzo1 J'ai ajouté mes réflexions sur les solutions possibles à la réponse :) – Ap31
Merci. Je vais essayer de voir si cela fonctionne. – baronzo1