从这篇文章中我看到你不能重载指针的运算符:C++:对象指针的 https://stackoverflow.com/questions/1419997/c-operator-overloading-of-for-pointers-to-objects
但是有什么办法可以重载 boost 指针的运算符吗?例如:
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)) { ... }
我认为我坚持使用指针,因为我不能使用按值传递(因为我正在利用多态性),并且我不能使用按 const 引用传递(因为嵌套运算符会创建临时对象稍后尝试验证时将不存在)。
编辑:在这里添加了一个针对我的问题的新问题: 创建稍后用于计算 C++ 中映射内容的表达式的实现建议? https://stackoverflow.com/questions/3441608/implementation-suggestions-for-creating-an-expression-later-used-to-evaluate-the