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

我很困惑为什么不能使用二元运算符

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

点赞