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

工程建设室内涂料招投标网站做网站 简单外包

工程建设室内涂料招投标网站,做网站 简单外包,宠物网站建设需求分析,怎么在企业站建立网站吗C 模板工厂、支持任意参数代理、模板元编程一、模板工厂二、支持任意参数代理三、模板元编程1.基本构建块​2.编译期 vs 运行时3.例子例子一例子二例子三一、模板工厂 我们需要创建如下的类型,类型可能有很多个 struct TestObj1 {};struct TestObj2 { public:Test…

C++ 模板工厂、支持任意参数代理、模板元编程

  • 一、模板工厂
  • 二、支持任意参数代理
  • 三、模板元编程
    • 1.基本构建块​
    • 2.编译期 vs 运行时
    • 3.例子
      • 例子一
      • 例子二
      • 例子三


一、模板工厂

我们需要创建如下的类型,类型可能有很多个

struct TestObj1
{};struct TestObj2
{
public:TestObj2(){}TestObj2(int a,int b):a(a),b(b){}int a;int b;
};

我们可以用如下模板创建,但是有个弊端,我们无法为创建的对象进行赋值

template<typename T>
T* CreateObject()
{return new T();
}

让我们改进一下
如下图,我们使用可变参数实现了不同遍历的赋值操作,但是每次赋值都会产生拷贝,我们继续优化

template<typename T,typename ...ParamTypes>
T* CreateObject(ParamTypes&&...Param)
{return new T(Param...);
}

使用 #include <type_traits> 下的forward函数,避免拷贝

template<typename T,typename ...ParamTypes>
T* CreateObject(ParamTypes&&...Param)
{return new T(std::forward<ParamTypes>(Param)...);
}

二、支持任意参数代理

代理或者委托就是对函数指针的一种封装

  • 需要有调用的实例
  • 执行调用的函数指针
  • 重载()调用委托
template<typename TObjectType,typename TReturn,typename ...ParamTypes>
class FDelegate
{
public:FDelegate(TObjectType* InObject, TReturn(TObjectType::* InFunction)(ParamTypes...)):Object(InObject), Function(InFunction){}TReturn operator()(ParamTypes&&...Param){return (Object->*Function)(std::forward<ParamTypes>(Param)...);}public:TObjectType* Object;TReturn(TObjectType::* Function)(ParamTypes...);
};template<typename TObjectType, typename TReturn, typename ...ParamTypes>
FDelegate<TObjectType, TReturn, ParamTypes...> CreateDelegate(TObjectType* InObject, TReturn(TObjectType::* InFunction)(ParamTypes...))
{return FDelegate<TObjectType, TReturn, ParamTypes...>(InObject, InFunction);
}

使用如下

    DelegateStruct* ds = new DelegateStruct();auto delegate = CreateDelegate(ds, &DelegateStruct::TestFunc);int sum = delegate(1, 2);std::cout << sum << std::endl;

如下是对核心语法 (Object->*Function)(std::forward<>(Param)…) 的解析
在这里插入图片描述
为什么要这样设计:
在这里插入图片描述

三、模板元编程

模板元编程(Template Metaprogramming,简称TMP)是C++的一项强大技术,利用模板系统在​​编译期​​进行计算、生成代码和执行逻辑。它在现代C++开发中扮演着关键角色。

1.基本构建块​

  • 类型计算​​:typedef, using别名
  • 值计算​​:static constexpr成员
  • ​​模式匹配​​:模板特化与偏特化
  • 递归实例化​​:模板递归调用

2.编译期 vs 运行时

在这里插入图片描述

3.例子

例子一

定义:

template<class T,T t>
struct FConstTest
{static constexpr T Value = t;
};

使用:

    int value1 = FConstTest<int, 10>::Value;std::cout << value1 << std::endl;

例子二

定义:

template<int value1,int value2>
struct FConstTest1
{static constexpr int Value = value1 + value2;
};

使用:

    int value2 = FConstTest1<10, 20>::Value;std::cout << value2 << std::endl;

例子三

定义:

template<class T,T t>
struct FConstTest
{static constexpr T Value = t;
};template<bool v>
using bool_temp = FConstTest<bool, v>;template<class , class>
constexpr bool isSame_V = false;template<class T>
constexpr bool isSame_V<T, T> = true;template<class T1,class T2>
struct isSame : bool_temp<isSame_V<T1,T2>>{};

使用:

    bool b1 = isSame<int, int>::Value;std::cout << b1 << std::endl;bool b2 = isSame<int, float>::Value;std::cout << b2 << std::endl;

文章转载自:

http://zYTggVEp.mjdbd.cn
http://bFYQySor.mjdbd.cn
http://lsRV3Pix.mjdbd.cn
http://kqimp73g.mjdbd.cn
http://Bf7UrihL.mjdbd.cn
http://9XWIQClo.mjdbd.cn
http://HA2LxrbC.mjdbd.cn
http://jEfbur89.mjdbd.cn
http://m5tD00iS.mjdbd.cn
http://Sjsugh1a.mjdbd.cn
http://BkbdTZLs.mjdbd.cn
http://EtnYgl7E.mjdbd.cn
http://QF1WFud2.mjdbd.cn
http://04Zb2qXZ.mjdbd.cn
http://GGJnMqRT.mjdbd.cn
http://kDGoophj.mjdbd.cn
http://0wN5SEuK.mjdbd.cn
http://UyZWGexa.mjdbd.cn
http://TzqkbGSg.mjdbd.cn
http://YuXfDGDV.mjdbd.cn
http://HXx1JchN.mjdbd.cn
http://pDWMMduM.mjdbd.cn
http://t7aHoCs6.mjdbd.cn
http://zQDFnB1o.mjdbd.cn
http://guafyzcn.mjdbd.cn
http://d2zdfRps.mjdbd.cn
http://oCnSdW4A.mjdbd.cn
http://bOU8CBaP.mjdbd.cn
http://UnYa81XH.mjdbd.cn
http://lemsjHSn.mjdbd.cn
http://www.dtcms.com/wzjs/688152.html

相关文章:

  • php网站开发外包营销策划与运营方案
  • 网站源码哪个好网站上的qq咨询怎么做
  • 制作个简单公司网站要多少钱社区建立网站
  • 用什么程序做视频网站如何为自己公司做网站
  • 电子网站建设策划模板asp网站安全吗
  • 中国制造网外贸网站深圳东门属于哪个区
  • 石嘴山网站定制开发建设销售平台排行榜前十名
  • 怎么看网站是不是用凡客做的精品网站建设费用磐石网络
  • 有没有做网站一次付费十堰网站建设价格
  • 网站建设内页六安人论坛百姓杂谈
  • 网站开发记什么费用网站制作哪里做得好
  • 杭州网站设计网页做旅游广告在哪个网站做效果好
  • 西安北郊做网站响应式网站建设案例
  • 绿色的医疗资讯手机网站wap模板html源码下载网站建设中期怎么入账
  • 海宁市住房和城乡规划建设局网站黔江网站制作
  • 什么查网站是否降权西安seo排名优化推广价格
  • 佛山市做网站的公司旅游电子商务网站建设费用
  • 做网站开发用笔记本要什么配置wordpress下载官网
  • 手机微网站怎么制作的网站编辑 seo
  • 用ps做糖果店网站模板唯品会专门做特卖的网站
  • 番禺做网站开发网络编程技术题库
  • 竞价单页 网站深圳市建设管理中心
  • 做电商网站价格WordPress导航类主题主题
  • 网站中的文字滑动怎么做的网站本地环境搭建软件
  • 平凉市建设厅官方网站三星官方网站
  • 郑州专业网站建设价格上海网站制作案例
  • 公司网站建设请示新手怎么做网站内容维护
  • 一个网站空间可以做多少个网站html网页制作兼职平台
  • 网站支付页面源代码长沙网络推广袁飞seo
  • 专业做网站技术论坛网站前置审批