C++ TypeTraits
本专栏为学习C++的type traits,作为模板编程的基础。
Tony Tian TL
这个作者很懒,什么都没留下…
展开
-
C++类型支持之std::is_function
std::is_function(C++11)用于检查类型是否为函数,此处函数类型包括std::function, lambda, 有重载operator()的类。可能的实现:// 初等模板template<class>struct is_function : std::false_type { };// 对常规函数的特化template<class Fn, class... Args>struct is_function<Fn(Args...)> : s原创 2020-10-25 16:55:33 · 1393 阅读 · 1 评论 -
C++类型支持之std::decltype
前言std::decltype主要用于推导输入表达式的类型,注意该推导过程在编译期完成,并不会真正对表达式求值。推导规则如下:如果输入为标识符表达式或类成员表达式,则推导类型即为标识符或类成员的类型如果输入为类型为T的其他形式表达式:如果表达式的值为左值,则推导结果为 T&如果表达式的值为纯右值,则推导结果为 T如果表达式的值为将亡值,则推导结果为 T&&如果输入的变量类型包含在括号内,则认为类型为左值,结果为T&标识符表达式与类成员表达式cla原创 2020-10-25 16:01:11 · 812 阅读 · 0 评论 -
C++类型支持之数组
std::is_array(C++11) 用于判断一个类型是否为数组,如果为数组,则返回1,否则返回0。可能实现: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]&原创 2020-10-24 20:08:41 · 843 阅读 · 0 评论 -
C++类型支持之类型关系
std::is_same用于判断两个类型是否相同,注意,这里需要考虑const和volatile的限定,即 T 和const T是不相同的。std::is_same满足交换律,即std::is_same<A, B>::value == std::is_same<B, A>::value。可能的实现为:template<class T, class U>struct is_same : std::false_type{};template<class T&原创 2020-10-24 19:17:03 · 179 阅读 · 0 评论 -
C++类型支持之std::is_void
std::is_void主要用于判断指定类型是否为void,注意这里的void包括 void, const void, volatile void 及const volatile void。可能实现为:template<class T>struct is_void: std::is_same<void, typename std::remove_cv<T>::type> {};#include <iostream>using namespace原创 2020-10-24 18:47:03 · 1474 阅读 · 1 评论