Из этого поста я вижу, что вы не можете перегрузить операторы для указателей: C ++: Перегрузка операторов <для указателей на объекты </a>
Но есть ли способ перегрузить операторы дляповысить указатели?Например:
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;
}
При попытке этого я получаю неоднозначную ошибку перегрузки (она конфликтует со встроенным оператором || (bool, bool)).Есть какие-нибудь идеи, чтобы обойти это?
Редактировать: добавив несколько подробностей ниже о том, почему я хотел бы сделать это.
Я постараюсь объяснить, чтоЯ стараюсь, как могу.Что я хотел бы сделать, так это создать объект «валидатор» для карт, который может проверять, сохраняются ли определенные свойства.Например:
boost::shared_ptr<MyValidator> my_validator = IsEmpty("key name 1") && IsNotEmpty("key name 2") || HasNElements("key name 3", num)
Позже, чтобы проверить карту:
if(my_validator.validate(some_map)) { ... }
Я думаю, что я застрял с использованием указателей, потому что я не могу использовать проход по значению (так как я 'я использую полиморфизм), и я не могу использовать проход по константной ссылке (так как был бы временный объект, созданный вложенными операторами, которых не было бы позже при попытке проверить).
Редактировать: Здесь добавлен новый вопрос, специфичный для моей проблемы: Рекомендации по созданию выражения для последующего использования для оценки содержимого карты в c ++?