您的位置:首页 > 编程语言 > C语言/C++

c++11中decltype的妙用

2015-11-29 14:53 357 查看
下面是《深入理解c++11》中的部分截图





以下是自己的实现,实用几个宏,实现对多用类成员变量的setter和getter,auto与decltype搭配,干活不累

#define  GetProperty(Var,VarName) inline auto Get##VarName() const ->decltype(Var) { return Var;}
#define  SetProperty(Var,VarName) inline void Set##VarName(decltype(Var) _v){ Var = _v;}
#define  GetSetProperty(Var,VarName)\
GetProperty(Var, VarName)\
SetProperty(Var, VarName)

//decltype(Var) 根据Var实际的类型推导出类型

class Pig
{
private:
int mAge;
std::string mName;

public:
GetSetProperty(mAge, Age); //一定要在声明的变量名下面(有点习惯性的把方法写在上面,变量在下面),不然编译报错,未定义mAge
GetSetProperty(mName, Name);
};

void testDeclType()
{
int  iarr[10] = { 0 };
decltype(iarr) ib; //这个时候ib的定义等价于 int ib[10];两者是一样的,不要认为ib是一个指针了,它是一个正宗的数组。
printf("--- sizeof ib:%d\n",sizeof(ib)); //40

Pig p;
p.SetAge(123);
p.SetName("uuu");

printf("--- pig age:%d, name:%s\n",p.GetAge(), p.GetName().c_str());

/*
--- sizeof ib:40
--- pig age:123, name:uuu
*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: