69,373
社区成员
发帖
与我相关
我的任务
分享
//I try to use C to implement this
struct _data {
int m1;
int m2;
};
int __COUNT;
#define GET_MEMBER_POS(struct_type,member_name) (int)(&(struct_type*)0->member_name)
#define MACRO(pdata,mem1,mem2) \
__COUNT = 1;\
for(mem1 = pdata->m1; __COUNT;)\
for(mem2 = pdata->m2; __COUNT;__COUNT--)
int main()
{
//how to use:
_data test;
_data* pdata = &test;
test.m1 = 12;
test.m2 = 23;
MACRO(pdata,int x,int y)
{
printf("test : m1 = %d,m2 = %d",x,y);
}
getchar();
}
template<typename Type,typename MemberType,MemberType Type::*pMember>
struct FillMember
{
void operator()(Type &data,MemberType new_value)
{
data.*pMember = new_value;
}
};
///////////////////////////
//what you need to do with it is the following;
struct TestStruct
{
int x;
char y;
};
//you need the following two objects to help
FillMember<TestStruct,int,&TestStruct::x> fill_x;
FillMember<TestStruct,char,&TestStruct::y> fill_y;
#define FILL_TEST(test,x,y) \
do{fill_x(test,x);fill_y(test,y);}while(0)
int main()
{
//how to use:
TestStruct test;
fill_x(test,23);//fill x only;
fill_y(test,'y');
FILL_TEST(test,123,'a');//fill both;
printf("filled test: x = %d, y = %c",test.x,test.y);
getchar();
}