D'après ce post, je vois que l'on ne peut pas surcharger les opérateurs pour les pointeurs : C++ : Surcharge de l'opérateur < pour les pointeurs vers les objets
Mais existe-t-il un moyen de surcharger les opérateurs pour les pointeurs boost ? Par exemple :
boost::shared_ptr<ClassB> operator||(boost::shared_ptr<ClassA> lhs, boost::shared_ptr<ClassA> rhs) {
boost::shared_ptr<ClassB> returnVal = CreateClassBSharedPtr(lhs, rhs);
return returnVal;
}
Lorsque je tente de le faire, j'obtiens une erreur de surcharge ambiguë (il y a conflit avec l'opérateur intégré||(bool, bool)). Avez-vous une idée pour contourner ce problème ?
Edit : J'ajoute ci-dessous quelques détails supplémentaires sur la raison pour laquelle j'aimerais faire cela.
Je vais essayer d'expliquer du mieux que je peux ce que j'essaie de faire. Ce que j'aimerais faire, c'est créer un objet "validateur" pour les cartes qui puisse vérifier si certaines propriétés sont valables. Par exemple :
boost::shared_ptr<MyValidator> my_validator = IsEmpty("key name 1") && IsNotEmpty("key name 2") || HasNElements("key name 3", num)
Plus tard, pour valider une carte :
if(my_validator.validate(some_map)) { ... }
Je pense que je suis coincé avec l'utilisation de pointeurs parce que je ne peux pas utiliser le passage par valeur (puisque je fais usage du polymorphisme) et je ne peux pas utiliser le passage par référence constante (puisqu'il y aurait des objets temporaires créés par l'imbrication d'opérateurs qui n'existeraient pas plus tard quand on essaierait de valider).
Edit : Ajout d'une nouvelle question spécifique à mon problème ici : Suggestions d'implémentation pour créer une expression utilisée ultérieurement pour évaluer le contenu d'une carte en c++ ?