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

电商网站规划品牌传播策划方案

电商网站规划,品牌传播策划方案,优设网ps教程,wordpress公司展示网站模板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://www.dtcms.com/wzjs/504438.html

相关文章:

  • 2017织梦网站怎么做seo外贸如何做网站推广
  • 哪些网站的做的好看快速排名推荐
  • 网站定制公司排行榜东莞全网营销推广
  • 简历模板免费下载网站优化网站seo方案
  • 邢台做网站哪家好网站在线优化检测
  • 电子商务网站设计的原则成都疫情最新消息
  • 免费建设互动的网站深圳防疫措施优化
  • 健康类网站模板太原网站快速排名提升
  • 货代找客户的网站网络推广的方法有
  • 做文献ppt模板下载网站有哪些企业网址怎么注册
  • 做网站的公司需要哪些资质百度平台客服电话
  • seo优化工具使用教程谷歌seo搜索优化
  • wordpress cos关键词优化的软件
  • 上海品质网站建设常德网站建设制作
  • 上海做网站建设的公司排名百度seo排名规则
  • 工程建设标准化期刊是什么级别seo在线短视频发布页运营
  • 海南中小企业网站建设打广告的免费软件
  • 北京王府井房价多少钱一平湖南正规seo优化
  • 设计师网名昵称四川旅游seo整站优化
  • 网站开发宣传语app拉新推广平台
  • 个人网站做淘宝客成都网站快速排名优化
  • 营销智库网站免费网站友情链接
  • 有个网站做中日韩测试今日头条淄博新闻
  • 网络认证登录页面网站seo优化有哪些方面
  • 商城网站建设快速服务整站优化包年
  • 郑州做定制网站的公司哪家好百度搜索优化软件
  • 昆明购物网站建设热狗网站排名优化外包
  • 网站开发实训报告总结做网站的公司
  • 简述建设动态网站环境要求seo技术306
  • seo做的好的网站百度seo排名优化是什么