float Point3d::* 类型怎么比较大小?

Microsues 2011-05-29 08:56:32

#include <iostream>
#include<list>
#include<assert.h>
using namespace std;

class Point3d
{
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_t(data_type1 class_type::*mem1,data_type2 class_type::*mem2)
{
assert (mem1 != mem2);
return mem1 < mem2 ? "member 1 occurs first" : "member 2 occurs first";
}

int main()
{
Point3d Pobj;
if(&Pobj.x < &Pobj.y)
cout<< "member 1 occurs first" <<endl;
else
cout<< "member 2 occurs first" <<endl;

//if(&Point3d::x < &Point3d::y) // float Point3d::* 类型不能直接比较大小
cout<< access_order_t(&Point3d::x,&Point3d::y)<<endl;
}

程序编译出错:Error 1 error C2296: '<' : illegal, left operand has type 'float Point3d::* '

请问怎么比较float Point3d::*类型的大小 ?
...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQIANQQ 2011-05-29
  • 打赏
  • 举报
回复
楼主看下http://blog.csdn.net/QQIANQQ/archive/2011/01/17/6146404.aspx
qiaolixian 2011-05-29
  • 打赏
  • 举报
回复
return mem1.x < mem2.x ? "member 1 occurs first" : "member 2 occurs first";
QQIANQQ 2011-05-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]
C/C++ code
#include <iostream>
#include<list>
#include<assert.h>
using namespace std;

class Point3d
{
public:
float x;
static list<Point3d*> *freeList;
public:
float y;
s……
[/Quote]
++不在一个层次上面的 学习了!
taodm 2011-05-29
  • 打赏
  • 举报
回复
指向成员的指针,比较大小有什么意义?就像指向函数的指针比较,有啥意义?
老邓 2011-05-29
  • 打赏
  • 举报
回复
用一个union来欺骗编译器。
老邓 2011-05-29
  • 打赏
  • 举报
回复
#include <iostream>
#include<list>
#include<assert.h>
using namespace std;

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

template <typename T>
void* GetMemberFuncAddr(T t)
{
union
{
T from;
void* to;
} ut;

ut.from = t;
return ut.to;
}

template<class class_type, class data_type1, class data_type2>
char* access_order_t(data_type1 class_type::*mem1, data_type2 class_type::*mem2)
{
assert(mem1 != mem2);
return GetMemberFuncAddr(mem1) < GetMemberFuncAddr(mem2) ? "member 1 occurs first" : "member 2 occurs first";
}

int main()
{
Point3d Pobj;
if (&Pobj.x < &Pobj.y)
cout << "member 1 occurs first" << endl;
else
cout << "member 2 occurs first" << endl;

//if(&Point3d::x < &Point3d::y) // float Point3d::* 类型不能直接比较大小
cout << access_order_t(&Point3d::x, &Point3d::y) << endl;
}

bargio_susie 2011-05-29
  • 打赏
  • 举报
回复
你想按照哪个数据成员比较呢??

return mem1.x < mem2.x ? "member 1 occurs first" : "member 2 occurs first";


按照数据成员x来比较的

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧