64,637
社区成员
发帖
与我相关
我的任务
分享
#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;
}
#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;
}
return mem1.x < mem2.x ? "member 1 occurs first" : "member 2 occurs first";