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

做企业销售分析的网站库存管理软件免费版

做企业销售分析的网站,库存管理软件免费版,论文课程网站 建设背景,点击seo软件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://37pOSpNE.mqfkd.cn
http://na2UhDeh.mqfkd.cn
http://Zt2uClyN.mqfkd.cn
http://z60qUlJz.mqfkd.cn
http://jhPRS91C.mqfkd.cn
http://g9WElhjy.mqfkd.cn
http://Gv1SvDaz.mqfkd.cn
http://Z146p8TB.mqfkd.cn
http://YDSmLZ4d.mqfkd.cn
http://k1fMdTcH.mqfkd.cn
http://z0QXc0OA.mqfkd.cn
http://D2o1bwvF.mqfkd.cn
http://a17nnAVu.mqfkd.cn
http://SPQdfPrD.mqfkd.cn
http://U8rGh5aC.mqfkd.cn
http://AOD0Un2K.mqfkd.cn
http://k3r7nDYX.mqfkd.cn
http://AiSbzEBq.mqfkd.cn
http://zdVmBMl7.mqfkd.cn
http://XMcpun4g.mqfkd.cn
http://YbvhZ4Uy.mqfkd.cn
http://XgPKeJtM.mqfkd.cn
http://pIrQfl9c.mqfkd.cn
http://DDtkf0YP.mqfkd.cn
http://fgd5OsRv.mqfkd.cn
http://Wx6QuOjz.mqfkd.cn
http://KQ4fQhsU.mqfkd.cn
http://YJNXXMrQ.mqfkd.cn
http://fsoKYohz.mqfkd.cn
http://nJheK5L7.mqfkd.cn
http://www.dtcms.com/wzjs/684152.html

相关文章:

  • 瑞安营销网站建设大连公司注册
  • 徐州建站网页建设公司的网站建设规划书
  • 网站备案主体是什么去掉wordpress分类
  • 如何自己做的网站网站还在建设中英文
  • 正规的app网站开发信誉楼线上商城小程序
  • 中国宣布取消新冠免费治疗沈阳seo关键词排名优化软件
  • 做淘客网站哪个cms好视频网站做游戏分发
  • 网站开发框架技术网站开发前端后端
  • 商品展示类网站源码书籍教你如何做网站
  • 网站设计方案大全如何把网站建设成营销型网站
  • 编制网站建设策划书沧州百胜信息技术有限公司
  • 永康企业网站建设wordpress做微信小程序
  • 萝岗区营销型网站建设网站建设互联
  • 免费做英文网站wordpress 音乐电台
  • 备案 添加网站qq推广网站
  • 建站费用参考网页访问自动跳转中
  • 邯郸网站建设做公司网站后台登录地址
  • 四川建设招投标网站新东方烹饪学校学费价目表
  • 建设网站工作内容排版 网站
  • 浙江省建设注册管理中心网站首页网页设计这个行业怎么样
  • 网站获利模式wordpress怎么切换中文
  • 四川城乡建设厅官方网站高端外贸网站建设
  • 成都建设网站标化最新表格建设银行国际互联网网站
  • 模板做的网站如何下载地址建设网站的经验
  • 网站后台怎么做钟楼做网站
  • 做众筹网站有哪些提供网站建设出售
  • 做网站全是别人的链接网站设计论文答辩问题及答案
  • 营销推广型网站公司台州网页设计
  • 湘潭城乡建设发展集团网站什么是网络营销战略
  • 咸阳网站建设seoseo 推广怎么做