码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++实现max,min,sum,bind


    这些实现非常简单,甚至不能说实现,只是“包装”,“套壳”,但是总而言之能不自己写就不要自己写。

    1. namespace mylib {
    2. template<typename...Ts, typename Type = std::common_type_t>
    3. constexpr auto min(const Ts&... args)noexcept {
    4. return std::min({ static_cast(args)... }, std::less<>());
    5. }
    6. template<typename...Ts, typename Type = std::common_type_t>
    7. constexpr auto max(const Ts&... args)noexcept {
    8. return std::max({ static_cast(args)... }, std::less<>());
    9. }
    10. template<typename...Ts, typename Type = std::common_type_t>
    11. constexpr auto sum(const Ts&...args)noexcept {
    12. return (static_cast(args) + ...);
    13. }
    14. template<class ...Args,class F>requires std::is_pointer_v
    15. inline auto bind(F f, Args&&...args) {
    16. return [=]()mutable
    17. {
    18. return f(std::forward(args)...);
    19. };
    20. }
    21. template<class ...Args, class F>requires std::is_class_v
    22. inline auto bind(F f, Args&&...args) {
    23. return [=]()mutable
    24. {
    25. return f(std::forward(args)...);
    26. };
    27. }
    28. }

    首先你需要学习过模板,再学习过形参包,constexpr,lambda,可变参数,折叠表达式,完美转发,右值引用,约束与概念,然后就可以了,非常的简单

     记得打开编译器的c++20选项

    单元测试如下:

    1. int f(int a) {
    2. fmt::print("{} \n", a);
    3. return a;
    4. }
    5. int main() {
    6. fmt::print("{} \n", my::max(1, 2, 3, 4));
    7. fmt::print("{} \n", my::min(1, 2, 3, 4));
    8. fmt::print("{} \n", my::min(10.2, 2.9, 3.9, 4));
    9. constexpr auto N = my::min(10.2, 2, 3.9, 4);
    10. fmt::print("{} \n", my::max(10.2, 2.9, 3.9, 4));
    11. constexpr auto N2 = my::max(10.2, 2, 3.9, 4);
    12. fmt::print("{} \n", my::sum(1.1, 2));
    13. std::function F = f;
    14. auto p = my::bind(F, 1);
    15. p();
    16. auto p2 = my::bind(f, 10);
    17. p2();
    18. auto p3 = my::bind([](int v) {return f(v); }, 10);
    19. p3();
    20. }

    在visual studio2022下编译通过,还使用了三方库fmt,链接如下:

    GitHub - fmtlib/fmt: A modern formatting libraryA modern formatting library. Contribute to fmtlib/fmt development by creating an account on GitHub.https://github.com/fmtlib/fmt

  • 相关阅读:
    专业综合课程设计 - 优阅书城项目(第一版)
    顺序栈与链式栈
    李宏毅深度学习01——基本概念简介
    MySQL里的查看操作
    Kubernetes技术与架构-网络 3
    【Web前端】一文带你吃透HTML(上篇)
    关于分布的理解
    绘制动图,金星木星月亮太阳绕圆
    Mybatis的二级缓存 (ehcache方式)
    瑞吉外卖项目学习笔记01
  • 原文地址:https://blog.csdn.net/a4364634611/article/details/127697182
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号