- 首页 > it技术 > >
// enable_if
template
struct enable_if {};
template
struct enable_if
{ typedef _Tp type;
}// integral_constant
template
struct integral_constant
{
static constexpr _Tpvalue = https://www.it610.com/article/__v;
typedef _Tpvalue_type;
typedef integral_constant<_Tp, __v>type;
constexpr value_type operator()() const noexcept { return value;
}
};
/// The type used as a compile-time boolean with true value.
typedef integral_constanttrue_type;
/// The type used as a compile-time boolean with false value.
typedef integral_constantfalse_type;
值得好好读
- 第一部分,定义了integral_constant以及
* Template utilities for compile-time introspection and modification,
* including type classification traits, type property inspection traits
* and type transformation traits.
using true_type = integral_constant;
using false_type = integral_constant;
【type_traits源码阅读笔记】定义默认模板类继承false_type
,然后对符合要求的内建类型进行偏特化,继承true_type
同时一些也利用了可变模板参数(如conditional
、and
、or
)
- 第二部分,定义了
destructible
和 constructible
type properties.
* Utility to simplify expressions used in unevaluated operands
* declval is commonly used in templates where acceptable template parameters may have no constructor in common, but have the same member function whose return type is needed.
declval 在不构造对象(不求值的情况下返回成员函数的返回值)
这一部分用于判断是否可构造/析构,那么一定涉及判断是否含有构造/析构函数,这为我们判断某个类是否存在某个函数提供了思路。假设要判断的函数是testfunc()
class true_type{};
class false_type{};
struct _has_testfunc_impl{
template
static true_type __test(int);
template
static false_type __test(...);
}template
struct has_testfunc : public _has_testfunc_impl
{
using type = decltype(__test<_Tp>(0));
}
推荐阅读