如何在 C++ 中为 boost 指针创建重载运算符?

2024-02-17

从这篇文章中我看到你不能重载指针的运算符: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


您当然可以:

#include "boost/shared_ptr.hpp"

template <class A>
bool operator||(boost::shared_ptr<A> lhs, boost::shared_ptr<A> rhs) {
    return true;
}

int main() {
    boost::shared_ptr <int> a, b;
    bool x = a || b;
}

我不知道你是否可以做你的例子中正在做的事情,因为我不确定你想做什么!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C++ 中为 boost 指针创建重载运算符? 的相关文章

随机推荐