65,210
社区成员
发帖
与我相关
我的任务
分享
template<typename _Ty,typename _type>
class MemberWrap
{
public:
MemberWrap(){}
MemberWrap(const _Ty& mem):m_mem(mem){}
MemberWrap& operator=(const MemberWrap& rhs)
{
if(this == &rhs)
{
return *this;
}
m_mem = rhs.get();
return *this;
}
const _Ty& get()const
{
return m_mem;
}
void set(const _Ty& mem)
{
m_mem = mem;
}
private:
_Ty m_mem;
};
#define GENERATE_MEMBER(classtype,membername,membertype) class classtype##membertype##membername{};\
MemberWrap<membertype,classtype##membertype##membername> membername
#define GENERIC_SPECIFIEC_BEGIN(classtype,membername,membertype) template<>\
class MemberWrap<classtype,classtype::classtype##membertype##membername>\
{\
public:\
MemberWrap(){}\
MemberWrap(membertype &mem):membername(mem){}\
MemberWrap& operator=(const MemberWrap& rhs)\
{\
if(this == &rhs)\
{\
return *this;\
}\
membername = rhs.get();\
return *this;\
}
#define GENERIC_SPECIFIEC_END(membertype,membername) private:\
membertype membername;\
};
class M
{
public:
M()
{
}
GENERATE_MEMBER(M,m_strMeb,string);
};
GENERIC_SPECIFIEC_BEGIN(M,m_strMeb,string)
string get()const
{
return "it is specifiec";
}
void set(string mem)
{
m_strMeb = mem;
}
GENERIC_SPECIFIEC_END(string,m_strMeb)
int main()
{
M sm;
sm.m_strMeb.set("hello world");
cout << sm.m_strMeb.get()<<endl;
return 0;
}

为了一个get set,搞这样复杂的代码。。
template<typename _Ty,typename _type>
class MemberWrap
{
public:
MemberWrap() {}
MemberWrap(const _Ty& mem):m_mem(mem) {}
MemberWrap& operator=(const MemberWrap& rhs)
{
if(this == &rhs)
{
return *this;
}
m_mem = rhs.get();
return *this;
}
const _Ty& get()const
{
return m_mem;
}
void set(const _Ty& mem)
{
m_mem = mem;
}
private:
_Ty m_mem;
};
#define GENERATE_MEMBER(classtype,membername,membertype) class classtype##membertype##membername{};\
MemberWrap<membertype,classtype::classtype##membertype##membername> membername
#define GENERIC_SPECIFIEC_BEGIN(classtype,membername,membertype) template< typename T >\
class MemberWrap<membertype, T >\
{\
public:\
MemberWrap(){}\
MemberWrap(membertype &mem):membername(mem){}\
MemberWrap& operator=(const MemberWrap& rhs)\
{\
if(this == &rhs)\
{\
return *this;\
}\
membername = rhs.get();\
return *this;\
}
#define GENERIC_SPECIFIEC_END(membertype,membername) private:\
membertype membername;\
};
GENERIC_SPECIFIEC_BEGIN(M,m_strMeb,string)
string get()const
{
return "it is specifiec";
}
void set(string mem)
{
m_strMeb = mem;
}
GENERIC_SPECIFIEC_END(string,m_strMeb)
class M
{
public:
M()
{
}
GENERATE_MEMBER(M,m_strMeb,string);
};
int main( void )
{
M sm;
sm.m_strMeb.set("hello world");
cout << sm.m_strMeb.get()<<endl;
return 0;
}