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