模版元编程:C++11中type traits的部分实现

C++11新加入的type_traits头文件提供了模版元编程中常用的type trait基础设施,这些type traits基于编译期间的运算,能够极早提示出程序中的错误。这些type traits的基础就是整形包装器,见之前的博文总结:http://blog.csdn.net/u010487568/article/details/51273920。本文对type traits的部分进行总结和实现。

主类型归类

主要是判断语言提供的基础类型,包括数组、类、enum、union、指针、引用、函数、右值引用、成员函数指针、成员对象指针、void。这些类型归类都是继承自integral_constant这个整形包装器。下面提供部分实现。
这些基础类型都是基于模版偏特化即可实现,但偏特化需要考虑全面,下面以is_array说明。

template<class T> struct is_array : std::false_type {};

//偏特化一维数组
template<class T> struct is_array<T[]> : std::true_type {};

//偏特化多维数组
template<class T, std::size_t N> struct is_array<T[N]> : std::true_type {};

其余指针、引用实现相似,不过需要考虑const、volatile等修饰,其中函数还需要考虑const、volatile、noexcept修饰,以及可变参数与可变模版参数两种不同特化及这些组合。

// primary template
template<class>
struct is_function : std::false_type { };

// specialization for regular functions
template<class Ret, class... Args>
struct is_function<Ret(Args...)> : std::true_type {};

// specialization for variadic functions such as std::printf
template<class Ret, class... Args>
struct is_function<Ret(Args......)> : std::true_type {};

// specialization for function types that have cv-qualifiers
template<class Ret, class... Args>
struct is_function<Ret(Args...)const> : std::true_type {};
template<class Ret, class... Args>
struct is_function<Ret(Args...)volatile> : 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值