作为一个标准的C++模板类,我们先看下enable_if的定义:文章来源:https://www.toymoban.com/news/detail-701579.html
// STRUCT TEMPLATE enable_if
template <bool _Test, class _Ty = void>
struct enable_if {}; // no member "type" when !_Test
template <class _Ty>
struct enable_if<true, _Ty> { // type is _Ty for _Test
using type = _Ty;
};
SFINAE
再说清楚这部分代码之前,我们先来说明一下SFINAE(
Substitution failure is not an error)的原理,先给一个实例:文章来源地址https://www.toymoban.com/news/detail-701579.html
#include<iostream>
#include<type_traits>
template<bool, typename T = void> // #1
struct test_SFINAE {
};
template<typename T> // #2, partial specialization
struct test_SFINAE<true, T> { //
typedef int type;
};
template<typename T, typename test_SFINAE<std::is_integral<T>::value, bool>::type = 0>
// #3
void test_SFINAE_func() // Only T is int
到了这里,关于C++中std::enable_if和SFINAE介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!