当前位置: 首页 > wzjs >正文

做响应式的网站免费网络推广网址

做响应式的网站,免费网络推广网址,大连做公司网站,长沙网站制作哪家强std::enable_if可以以多种形式使用,包括: 作为类模板或函数模板参数作为返回类型(不适用于构造函数和析构函数)作为附加函数参数(不适用于运算符重载) std::enable_if can be used in many forms, includ…

std::enable_if可以以多种形式使用,包括:

  • 作为类模板或函数模板参数
  • 作为返回类型(不适用于构造函数和析构函数)
  • 作为附加函数参数(不适用于运算符重载)

std::enable_if can be used in many forms, including:

  • as an additional function argument (not applicable to most operator overloads),
  • as a return type (not applicable to constructors and destructors),
  • as a class template or function template parameter.

std::enable_if 核心是结合 SFINAE(Substitution Failure Is Not An Error)机制,实现编译期的条件分支逻辑。

c++14中,定义了using enable_if_t = typename enable_if<B,T>::type;

1. 作为类模板或函数模板参数

1.1 控制类模板的参数类型

例子,

// the partial specialization of A is enabled via a template parameter
template<class T, class Enable = void>
class A {}; // primary templatetemplate<class T>
class A<T, typename std::enable_if<std::is_floating_point<T>::value>::type>
{}; // specialization for floating point typesint main()
{A<int>{}; // OK: matches the primary templateA<double>{}; // OK: matches the partial specialization
}

另一个例子,

// 基础模板
template <typename Mat, typename Vec, typename Enable = void>
class Derived : public Base<Mat, Vec> {};  // 模版特化,针对double类型
template <typename Mat, typename Vec>
class Derived<Mat, Vec, std::enable_if_t<std::is_same_v<typename Mat::ElementType, std::complex<double>>>> : public Base<Mat, Vec> {};// 模版特化,针对std::complex<double>类型
template <typename Mat, typename Vec>
class Derived<Mat, Vec, std::enable_if_t<std::is_same_v<typename Mat::ElementType, std::complex<double>>>> : public Base<Mat, Vec> {};

在这个例子中,Derived继承自Base基类,但是能够针对Mat元素类型来进行特化。

这个例子使用了c++14新特性enable_if_t 。

1.2 控制函数模板的参数类型

例如,根据类型是否为整数类型来选择不同的函数实现:

#include <type_traits>
#include <iostream>template<typename T, typename std::enable_if<std::is_integral<T>::value, T>::type* = nullptr>
void print(T value) {std::cout << "Integral value: " << value << std::endl;
}template<typename T, typename std::enable_if<!std::is_integral<T>::value, T>::type* = nullptr>
void print(T value) {std::cout << "Non-integral value: " << value << std::endl;
}int main() {print(5);       // Integral value: 5print(3.14);    // Non-integral value: 3.14return 0;
}

在这个例子中:

  • 第一个 print 函数模板仅对整数类型有效(std::is_integral<T>::valuetrue)。

  • 第二个 print 函数模板对非整数类型有效(std::is_integral<T>::valuefalse)。

2. 作为返回类型

例子,

#include <type_traits>
#include <iostream>template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
foo(T x)
{std::cout << "foo int";return x * 2;
}template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type
foo(T x)
{std::cout << "foo float";return x / 2.0;
}

在这个示例中,我们定义了两个函数模板foo,它们根据不同的类型来返回不同的结果。第一个foo函数只能接受整型参数,并返回这个整数的两倍。第二个foo函数只能接受浮点型参数,并返回这个浮点数的一半。

我们运行

foo(2);
foo(2.1);

将得到打印结果

foo int
foo float

3. 作为附加函数参数

以下是一个使用 std::enable_if 作为附加函数参数的示例,假设我们希望根据传入的类型是否为指针类型来选择不同的函数实现:

#include <iostream>
#include <type_traits>// 重载函数1:仅对指针类型有效
template<typename T>
void print(T* value, typename std::enable_if<std::is_pointer<T*>::value>::type* = nullptr) {std::cout << "Pointer value: " << *value << std::endl;
}// 重载函数2:对非指针类型有效
template<typename T>
void print(T value, typename std::enable_if<!std::is_pointer<T>::value>::type* = nullptr) {std::cout << "Non-pointer value: " << value << std::endl;
}int main() {int a = 10;int* ptr = &a;print(ptr);  // 调用指针版本的 printprint(a);    // 调用非指针版本的 printreturn 0;
}

运行程序后,输出结果如下:

Pointer value: 10
Non-pointer value: 10

参考:

https://en.cppreference.com/w/cpp/types/enable_if.html

C++ std::enable_if的简明指南_c enable if-CSDN博客


文章转载自:

http://Sc7Y8JQc.nstmL.cn
http://8TdKzK2x.nstmL.cn
http://SszS9Pol.nstmL.cn
http://fyOjQMvI.nstmL.cn
http://Dp86rrms.nstmL.cn
http://nBJ61JkF.nstmL.cn
http://Z271Qvxy.nstmL.cn
http://3q8lctW3.nstmL.cn
http://2QTM3Y82.nstmL.cn
http://nA6nEYpp.nstmL.cn
http://HQght1ze.nstmL.cn
http://kGX80uie.nstmL.cn
http://eVN9pvKv.nstmL.cn
http://a4woZ2iX.nstmL.cn
http://95nmxoMz.nstmL.cn
http://6MYqycCm.nstmL.cn
http://ix9F3Eqv.nstmL.cn
http://h4J8lMTh.nstmL.cn
http://CnzBlYI2.nstmL.cn
http://RKH44liW.nstmL.cn
http://6yubUggJ.nstmL.cn
http://eMpMaG7a.nstmL.cn
http://Oz45eFSv.nstmL.cn
http://phXBDMsz.nstmL.cn
http://mpuYh1JY.nstmL.cn
http://Thdo3mtB.nstmL.cn
http://AoBd0vdy.nstmL.cn
http://D3hb3Tl9.nstmL.cn
http://ISdTRxni.nstmL.cn
http://OgGy4UXq.nstmL.cn
http://www.dtcms.com/wzjs/764875.html

相关文章:

  • 品牌大气的网站设计代码怎么生成网站
  • 专业的高端网站设计公司关于网站开发的一些论文
  • 建设企业网站公积金wordpress 总数 函数
  • 网页的创新型网站策划网站名字要备案吗
  • asp网站改php网站方法ps制作网页效果图教程
  • 做推广效果哪个网站好广州发布最新通知
  • 哪些网站是vue做的青羊区企业网站建设策划
  • php跳转网站wordpress 导航 class
  • 如何在服务器上做网站下列关于网站开发中网页上传和
  • 做炒作的网站智慧团建官网入口登录
  • 电脑做视频的网站吗八年级微机网站怎么做
  • 做购物网站最开始没人怎么办网络营销推广策划的步骤
  • 长沙百度网站排名优化网站开发软件
  • 网页设计好的网站汕头app开发
  • 临沂高端大气网站建设百度关键词优化专家
  • 百度网站管理网站建设的分项报价
  • 设置网站域名解析和网站主机绑定网站建设方案计划书人员规划
  • 网站维护报价表品牌建设汇报
  • 达内网站开发课程网站被降权会发生什么影响
  • 建设银行的财务网站网店推广工作内容
  • 网站开发汇报的ppt网站建设 资质要求
  • 牟平建设局网站wordpress 添加链接
  • 旅游类网站怎么做沈阳网站建设 熊掌号
  • 济南专业做网站公司哪家好个人网页制作源代码博客
  • dw网站设计步骤网站信息安全保障制度建设情况
  • 网站交换链接的常见形式网站上传空间
  • 网站值不值得做seo公司的网站建设服务费
  • 医疗网站建设讯息网站开发和程序开发的却别
  • google 推广优化百度搜索引擎优化方式
  • 牛商网站建设哪些网站不扣流量