加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 比较指向成员的指针?

发布时间:2020-12-16 07:33:02 所属栏目:百科 来源:网络整理
导读:我很困惑为什么不能使用二元运算符比较指向成员的指针? class Point3d{ protected: //.. public: float x; static listPoint3d* *freeList; public: float y; static const int chunkSize = 250; public: float z; }; 和一个模板: template class class_ty
我很困惑为什么不能使用二元运算符<比较指向成员的指针?

class Point3d{
  protected:
      //..
 public:
     float x;
      static list<Point3d*> *freeList;
 public:
     float y;
     static const int chunkSize = 250;
 public:
    float z;

};
和一个模板:

template< class class_type,class data_type1,class data_type2 >

char* access_order(data_type1 class_type:: *mem1,data_type2 class_type:: *mem2)
{

    return
      mem1 < mem2 ?
         "member 1 accurs first":
         "member 2 accurs first";
}

当我像下面这样调用access_order时:

access_order(&Point3d::z,&Point3d::y);

据报道:

"invalid operands of types ‘float Point3d::*’ and ‘float Point3d::*’ to binary ‘operator<’"

有没有办法比较指向成员的指针,我的意思是不平等的比较,以及如何?

解决方法

出于同样的原因,你无法比较一般的指针.唯一的
如果两个数据指针指向,则支持的顺序比较
进入同一个数组.否则,比较的结果是
不明;不需要编译器使运算符“工作”
任何合理的方式. (确保这里的总订单需要额外的
计算某些架构.)因为没有案例你可以得到
指向成员的指针的结果,标准不允许
它们作为操作符的参数.

如果你需要总排序,std :: less等.保证提供它.包括,如果我正确理解标准,成员指针.(尽管提供指向成员函数的指针的总排序可能会非常昂贵.)然而,即使这样,这个顺序可能是任意的;它肯定不需要反映任何在内存中排序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读