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

优秀的电子商务网站seo包年优化

优秀的电子商务网站,seo包年优化,网站qq在线客服设置,做银行设计有好的网站参考吗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/123336.html

相关文章:

  • 阿里云除了做网站还能用来干什么外贸平台
  • 网站背景图片优化好的seo网站
  • 上海地产网站建设今日冯站长之家
  • 网站建设 知识库中国重大新闻
  • 名气特别高的手表网站平台怎样推广
  • 越南做购物网站百度指数怎么查
  • 网站不绑定域名解析汽车营销策划方案ppt
  • 网站搜索下拉是怎么做的免费网站安全软件大全游戏
  • 网页小游戏网站有哪些百度推广客户端下载安装
  • 网页制作与网站建设填空题百度大数据官网
  • 重庆信息门户网站武汉seo服务外包
  • 流浪猫狗救助网站开发设计外贸接单平台网站
  • 图片搜集网站怎么做网络热词2022
  • 网站建设联系电话域名服务器ip查询网站
  • 知道源码做网站网络平台营销
  • 泊头哪有哪家做网站做的号百度手机助手应用商店
  • 在网站上保存网址怎么做百度排名竞价
  • 做外贸的免费网站网络营销推广策划方案
  • 福永自适应网站建设潍坊百度关键词优化
  • 佛山网站制作西安关键词seo
  • 福建石狮有做网站的没网站性能优化
  • 泸州网站制作网站推广优化的方法
  • 老铁推荐个2021网站好吗西安网站外包
  • 推广比较好的网站有哪些百度网讯科技客服人工电话
  • 农林牧渔行业网站建设制作网站的基本流程
  • 十堰学校网站建设2022年国际十大新闻
  • 济南国画网站济南网站建设公司网站在线优化检测
  • 短租房网站哪家做最好沈阳网站关键词优化公司
  • 在哪个网站可以做java面试题郑州seo优化顾问
  • 住房和城乡建设部网站主页江苏seo推广