会不会激发对modern c++的新兴趣

这篇具有很好参考价值的文章主要介绍了会不会激发对modern c++的新兴趣。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可变参数好像很厉害的样子,会节省很多手写代码,让编译器自动帮我们生成代码

template<typename Fun, typename...Args>
void invoke(Fun&& fun, Args&&...args)
{
    fun(std::forward<Args>(args)...);
}
任意函数包装器,搞个面向切面,代理,信手拈来

仿照C#的委托

template<typename Fun>
class my_delegate
{
public:
    my_delegate(){}
    ~my_delegate(){}

    template<typename...Args>
    void operator()(Args&&...args) {
        for (auto i : m_funs)
        {
            i(std::forward<Args>(args)...);
        }
    }
    void append(Fun&& cb)
    {
        m_funs.push_back(std::move(cb));
    }
    my_delegate& operator+(Fun cb)
    {
        m_funs.push_back(std::move(cb));
        return *this;
    }
    my_delegate& operator+=(Fun cb)
    {
        m_funs.push_back(std::move(cb));
        return *this;
    }
    my_delegate& operator-=(Fun cb)
    {
        auto it = find(m_funs.begin(), m_funs.end(), cb);
        if (it != m_funs.end())
            m_funs.erase(it);
        return *this;
    }
private:
    std::vector<Fun> m_funs;
};

typedef void (*Fun)(int sender, int params);

void button_click(int sender, int params)
{
    std::cout << "invoke " << __FUNCTION__ << std::endl;
    std::cout << "sender = " << sender << " params = " << params << std::endl;
}
void button_other_event_handler(int sender, int params)
{
    std::cout << "invoke " << __FUNCTION__ << std::endl;
    std::cout << "sender = " << sender << " params = " << params << std::endl;
}
int main() {

    my_delegate<Fun> delegate_obj;
    delegate_obj += button_click;
    delegate_obj += button_other_event_handler;
    delegate_obj(0, 0);
    delegate_obj -= button_click;
    delegate_obj(10, 20);
    return 0;
}

还停留在老掉牙的C++的认知上,看了一些C++11的新特性,会不会激发对C++的新兴趣?文章来源地址https://www.toymoban.com/news/detail-685874.html

到了这里,关于会不会激发对modern c++的新兴趣的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Effective Modern C++ 第七章 并发API 1

    目录 条款35:优先使用基于任务而非基于线程的程序设计 要点速记:  条款36:如果异步是必要的,则指定std::launch::async 要点速记: 参考:EffectiveModernCppChinese/src/7.TheConcurrencyAPI/Item35.md at master · CnTransGroup/EffectiveModernCppChinese (github.com) 基于任务的方法通常比基于线程的方法更

    2024年02月07日
    浏览(24)
  • 与AI合作 -- 写一个modern c++单例工厂

    目录 前言 提问 bard给出的答案 AI答案的问题 要求bard改进  人类智能 AI VS 人类 通过本文读者可以学到modern C++单例模式+工厂模式的混合体,同时也能看到:如今AI发展到了怎样的智能程度?怎样让AI帮助我们快速完成实现头脑中的想法?以及这样的智能程度会不会让程序员失

    2024年02月21日
    浏览(24)
  • 【C++】C++引用 (引用不会?详细解决引用诸多细节!)

    C++引用目录: 一、引用的概念 二、引用的特性 2.1引用在定义的时候必须初始化 2.2一个变量可以有多个引用 2.3引用一旦引用了一个实体,就不可以再引用其他实体 三、常引用(带const的引用) 3.1临时变量有常性不能修改(传值返回,隐式/强制类型转换时产生) 3.2指针/引用

    2024年02月09日
    浏览(31)
  • 【C++】C++11的新特性(上)

       C++11作为C++标准的一个重要版本,引入了许多令人振奋的新特性,极大地丰富了这门编程语言的功能和表达能力。本章将为您介绍C++11的一些主要变化和改进,为接下来的章节铺垫。    文章目录 引入 一、列表初始化 1、1 {} 初始化 1、2 std::initializer_list的介绍 二、声明

    2024年02月11日
    浏览(24)
  • 【C++基础】C++11的新特性

    C++新特性主要包括包含语法改进和标准库扩充两个方面,主要包括以下11点 1、语法的改进 1)统一的初始化方法 在 C++11 中,可以直接在变量名后面跟上初始化列表,来进行对象的初始化 2)成员变量默认初始化 3)auto** 用于定义变量,编译器可以自动判断的类型(前提

    2024年02月16日
    浏览(21)
  • c++排序算法——冒泡排序(不会的一定要看,超级详细)

    今天,我们来学习一种排序算法—— 冒泡排序 。 首先,先问三个问题: 想象一下,如果字典不是按照字母顺序排列,查找一个单词,你得查到什么时候?这就是为什么人们引入了分类的概念,因为其 极大地帮助我们快速搜索物品 。 或者说,排序是一种常用的整理信息的方

    2024年02月16日
    浏览(32)
  • 【链表】还不会用C++实现链表?一文教会你各种链表的实现

    本文将用C++语言来实现数据结构中的无头单链表,带头循环链表,以及带头循环双向链表等链表结构(带头单链表与后两种链表的结构相似,实现起来比后两种更简单,读者阅读完本文即可自行实现) 无头单链表在头插时需要改变头指针的位置,具体代码实现如下: 带头意

    2024年02月08日
    浏览(31)
  • 从入门到精通,30天带你学会C++【第四天:程序中的数学运算】(学不会你找我)

    目录 前言 程序中的数学运算符 基本运算 特殊运算 %运算 sqrt运算 pow运算 max函数 min函数  如何运用运算符 1-4节课的综合小练习 结尾 这期点赞过100给大家发个小福利! 在我们的程序中也加加减乘除的运算,只不过有的符号比较特殊: 程序中 数学中 + + - - *(Shift+8) x / ÷

    2024年02月09日
    浏览(25)
  • 从入门到精通,30天带你学会C++【第五天:刷题软件的推荐及使用教程】(学不会你找我)

    目录 前言 刷题软件推荐 1、洛谷 2、OpenJudge 3、LeetCode 4、POJ 洛谷网站的使用方法 结尾 上期投票我定的时间太长了,相信很多人都等不及了,那么我就提前截止一下,抱歉。 在这也感谢大家参与! 截图时间:2023.9.1.21:56 投票结果是推荐刷题软件,那么今天课程他来了! 网址

    2024年02月10日
    浏览(33)
  • USACO21FEB Modern Art 3 G

    P7414 [USACO21FEB] Modern Art 3 G 题目大意 给你一个长度为 n n n 的数组,要求你在一个全部为 0 0 0 的数组中每次将一个区间 [ i , j ] [i,j] [ i , j ] 赋为同一个值,当前的赋值可以覆盖之前的值,求最少要赋值多少次才能使这个数组与给定数组相同。 1 ≤ n ≤ 300 1leq nleq 300 1 ≤ n ≤

    2024年02月09日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包