iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++类函数作为模板参数实现的方法是什么
  • 587
分享到

c++类函数作为模板参数实现的方法是什么

2023-07-05 07:07:56 587人浏览 泡泡鱼
摘要

今天小编给大家分享一下c++类函数作为模板参数实现的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。需求背景DB操作

今天小编给大家分享一下c++类函数作为模板参数实现的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

需求背景

DB操作有四种基本操作:Insert、Update、Delete和Query,每种操作需要进行功能增强(eg:支持重试、权限校验等),最粗暴的实现就是改动原有接口实现,在实现中加入增强逻辑,这种方式对代码侵入性过高,而且无法控制该逻辑是否需要,如果不需要的话又得重新修改代码实现。

可以用装饰者设计模式对原有接口做一层包装,然后在包装层里注入增强实现逻辑,伪码表现形式:

Status Insert(Args args...);Status Update(Args args...);Status Delete(Args args...);Status Query(Args args...);Status Wapper(...){    // 增强逻辑实现    ...    // 调用原有函数    Insert(Args args...)    // 返回处理结果    ...}

实现方式

对于这种通用的增强逻辑及包装形式,很适合用模板作为统一实现,简化代码逻辑,并增强后期维护,对于上述场景,有如下两种模板实现方式:

struct + operator

class DbWapper : public DbOperation{public:    // 继承方法    Status Insert(Args args...) override;    Status Update(Args args...) override;    Status Delete(Args args...) override;    Status Query(Args args...) override;private:    DbOperation *m_dbOperation;    template <typename Func, typename... Args>    Status Wapper(Func func, Args &&...args)    {        // 调用原有的函数逻辑        Status status = func(std::forward<Args>(args)...);        // 增强逻辑实现        ...        return status;    }}Status Insert(Args args...) {    // 利用struct + operator实现函数包装    struct InsertFunc {        DbOperation *dbOperation;        Status operator()(Args args...) const        {            // 调用原有逻辑            return dbOperation->Insert(args...);        }    } insertFunc{m_dbOperation};    // 将函数包装作为function传入增强逻辑    return Wapper(insertFunc, args...);}

Pass Function Signature

观察上一种实现方案,发现struct和operator只是为了构造一种函数参数,便于模板调用原有逻辑,所以我们可以尝试消除struct,让模板只接受具体的函数签名,就可以极大简化实现逻辑,具体实现如下:

class DbWapper : public DbOperation{public:    // 继承方法    Status Insert(Args args...) override;    Status Update(Args args...) override;    Status Delete(Args args...) override;    Status Query(Args args...) override;private:    DbOperation *m_dbOperation;    template <typename... Args0, typename... Args1>    Status Wapper(Status (DbOperation::*method)(Args0...), Args1 &&...args)    {        // 调用原有的函数逻辑        Status status = (m_dbOperation->*method)(std::forward<Args1>(args)...);        // 增强逻辑实现        ...        return status;    }}Status Insert(Args args...) {    // 传入具体的函数签名    return Wapper((Status(DbOperation::*)(Insert函数签名))(&DbOperation::Insert), args...);}

以上就是“c++类函数作为模板参数实现的方法是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网其他教程频道。

--结束END--

本文标题: c++类函数作为模板参数实现的方法是什么

本文链接: https://www.lsjlt.com/news/350382.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++类函数作为模板参数实现的方法是什么
    今天小编给大家分享一下c++类函数作为模板参数实现的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。需求背景DB操作...
    99+
    2023-07-05
  • c++类函数作为模板参数实现方式详解
    目录需求背景实现方式struct + operatorPass Function Signature需求背景 DB操作有四种基本操作:Insert、Update、Delete和Que...
    99+
    2023-03-01
    c++ 类函数作为模板参数 c++ 类函数
  • 如何使用 C++ 函数模板实现参数化类型?
    使用 c++++ 函数模板实现参数化类型简介函数模板可以处理不同类型的通用函数。参数化类型使函数模板更进一步,可以接受不同类型的参数。代码示例: 1. 定义函数模板 print_pai...
    99+
    2024-04-15
    函数模板 参数化类型 c++
  • Golang函数作为参数使用的方法是什么
    这篇文章主要讲解了“Golang函数作为参数使用的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang函数作为参数使用的方法是什么”吧!为什么需要将函数作为参数传递在Gola...
    99+
    2023-07-06
  • C++非类型类模板参数的基本概念是什么
    C++非类型类模板参数的基本概念是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C++编程语言已经出现就立即引起了开发人员的注意,它具有C语言的所用功能,并...
    99+
    2023-06-17
  • C++ 函数参数详解:参数类型推导与模板函数的使用
    c++++ 参数类型推导和模板函数:参数类型推导: auto 关键字可自动推断参数类型,简化声明并增强可读性。模板函数: 可接受不同类型数据,根据类型执行不同操作,语法:template...
    99+
    2024-04-27
    c++ 函数参数
  • C++ 函数模板的底层实现原理是什么?
    c++++ 函数模板通过部分特化根据不同的类型生成不同的函数代码,优化效率。每次调用模板时,编译器会实例化函数并生成特定于模板参数的特化代码。函数模板提供代码重用、灵活性和性能优化等优势...
    99+
    2024-04-24
    c++ 函数模板
  • C++ 函数模板中类型参数的使用技巧?
    使用类型参数技巧可以创建针对任何类型工作的通用 c++++ 函数模板,包括:声明类型参数:使用尖括号 和 typename 声明类型参数。使用类型参数:在函数体内使用类型参数作为类型声...
    99+
    2024-04-15
    c++ 函数模板
  • python中以函数作为参数(回调函数)的实现方法
    目录python以函数作为参数(回调函数)python函数的参数类型一、必须参数二、关键字参数三、默认参数四、不定长参数总结python以函数作为参数(回调函数) 纯粹是自己学习总结...
    99+
    2023-01-04
    python函数 python函数为参数 python回调函数
  • C++ 函数模板的语法及具体实现方法?
    c++++函数模板允许使用泛型类型参数定义函数,使函数可以处理不同类型的数据。具体实现如下:语法:template 返回类型 函数名(输入参数列表){ // 函数体 }泛型类型参数 t...
    99+
    2024-04-15
    c++ 函数模板
  • C++可变参数模板的展开方式是什么
    这篇文章主要讲解了“C++可变参数模板的展开方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++可变参数模板的展开方式是什么”吧!可变参数模板(variadic templates...
    99+
    2023-06-29
  • C++ 函数模板中的类模板是如何使用的?
    C++ 函数模板中的类模板 C++ 函数模板可以感知类模板,并利用它们作为参数类型。这允许您创建通用函数,适用于各种数据类型和结构。 语法template<typename T&...
    99+
    2024-04-15
    c++ 函数模板 代码可读性
  • C++模板参数的具体概念是什么
    这篇文章给大家介绍C++模板参数的具体概念是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++编程语言是一个功能强大的计算机应用语言,它的出现在一定程度上大大降低了开发人员的负担,提高了开发效率。我们在这里先来了...
    99+
    2023-06-17
  • C# WPF数据绑定模板化操作的方法是什么
    今天小编给大家分享一下C# WPF数据绑定模板化操作的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体...
    99+
    2023-06-26
  • C++ 函数的默认参数的使用方法是什么?
    默认参数允许函数在调用时指定默认值,简化代码并提高维护性。默认参数的语法为:type function_name(parameter_list, type parameter_name ...
    99+
    2024-04-19
    默认参数 c++函数 c++
  • C++ 函数模板中函数重载的实现原理?
    在 c++++ 函数模板中,函数重载可以通过编译器生成不同的符号名称和代码生成来实现。编译器根据传入的参数类型进行匹配,选择最匹配的重载。例如,模板中定义了 print(t) 和 pri...
    99+
    2024-04-15
    函数重载 函数模板 c++
  • 泛型类与函数模板的区别是什么?
    泛型类定义新数据类型,而函数模板定义算法。泛型类通过指定类型参数实例化,函数模板通过调用实例化。泛型类可以继承,而函数模板不能。 泛型类与函数模板的区别 泛型类和函数模板都是 C++ ...
    99+
    2024-04-24
    泛型 函数模板 c++ 作用域
  • C++函数模板非类型参数的注意事项有哪些呢
    本篇文章为大家展示了C++函数模板非类型参数的注意事项有哪些呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++编程语言中的模板应用是一个非常重要的应用技术。那么今天我们就先来了解一下有关C++函...
    99+
    2023-06-17
  • C++ 函数模板的语法和使用方法?
    函数模板是用于编写可适用于不同数据类型的函数的工具。通过指定类型参数,可以创建函数模板,并使用该模板实例化特定数据类型的函数。例如,可以创建 max() 模板函数以获取两个值的较大值,并...
    99+
    2024-04-24
    c++ 函数模板
  • C++ 函数模板在容器类设计中的作用?
    函数模板在容器类设计中可用于创建通用代码,应用于不同类型的数据,实现灵活性、可重用性、类型安全性和性能优势:声明时将类型作为参数,允许接受不同类型容器。在矢量类中,函数模板可定义通用操作...
    99+
    2024-04-15
    c++ 函数模板
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作