c++11中decltype的妙用
2015-11-29 14:53
357 查看
下面是《深入理解c++11》中的部分截图
![](http://img.blog.csdn.net/20151129144917777)
![](http://img.blog.csdn.net/20151129144925313)
以下是自己的实现,实用几个宏,实现对多用类成员变量的setter和getter,auto与decltype搭配,干活不累
以下是自己的实现,实用几个宏,实现对多用类成员变量的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 */ }
相关文章推荐
- bitset应用---产生1万个不重复的随机数
- c++11中的智能指针
- c++模板实现多参数任意传 - 类实现
- effective c++ 笔记之static_cast
- vs2008 dlib编译问题USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE
- 【C++】满二叉树与完全二叉树的区别及判断
- C++引用方式实现两个值的互换
- C++运算符重载
- C++抛出异常与传递参数的区别
- C++抛出异常与传递参数的区别
- C++【线程同步】-临界区同步
- c/c++进制转换
- C++的chrono、ratio和ctime等头文件
- leetcode Search a 2D Matrix
- C语言命名空间
- c语言字符数组与字符串的使用详解
- 读取文本文件,打印到屏幕
- C语言中switch的用法
- 合并两个排序的链表(C++版)
- C++模版完全解析