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等.保证提供它.包括,如果我正确理解标准,成员指针.(尽管提供指向成员函数的指针的总排序可能会非常昂贵.)然而,即使这样,这个顺序可能是任意的;它肯定不需要反映任何在内存中排序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |