繁体   English   中英

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

[英]How do I create overloaded operators for boost pointers in C++?

从这篇文章中我看到你不能为指针重载运算符: C ++:运算符重载<用于指向对象的指针

但有没有办法让运算符重载指针? 例如:

  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)) { ... }

我认为我坚持使用指针因为我不能使用pass by value(因为我正在使用多态)并且我不能使用pass by const引用(因为嵌套运算符会创建临时对象)在尝试验证时不会存在)。

编辑:在这里添加了一个特定于我的问题的新问题: 用于创建表达式的实现建议稍后用于评估c ++中的地图内容?

你当然可以:

#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;
}

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

你的方法应该有效,至少它对我有用

但是,在rhslhs上尝试一些用户定义的转换时,您将始终遇到模糊重载的问题。

操作员|| 必须总是返回一个布尔,所以你不能(为了你的同事的理智,不应该)这样做。 我建议你使用常规功能,并给它一个反映你想要做的事情的名字。 GetValidatedPtr()或类似的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM