问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

应聘C++程序员,他们出来一个MFC的问题,急!!求解,感觉这个又容易有好难,可以发邮箱874615679@qq.com

发布网友 发布时间:2022-05-07 11:36

我来回答

1个回答

热心网友 时间:2023-10-29 17:06

#include <functional>
#include <list>
#include <algorithm>
#include <utility>
#include <iostream>
using namespace std;

template<typename EventArg>
class EventSource
{
    using HandlerType = function<void(EventArg const&)>;
    using HandlerList = list<HandlerType>;
public:
    using TokenType = void*;

    EventSource() = default;

    TokenType operator +=(HandlerType handler)
    {
        m_handlers.push_back(move(handler));
        return &m_handlers.back();
    }

    void operator -=(TokenType t)
    {
        m_handlers.remove_if([t](HandlerType const& h) { return &h == t; });
    }

    void operator ()(EventArg const& v)
    {
        for (auto it = m_handlers.begin(); it != m_handlers.end();)
        {
            auto cur = it++;
            (*cur)(v);
        }
    }
private:
    EventSource(EventSource&) = delete;
    EventSource& operator=(EventSource&) = delete;

    HandlerList m_handlers;
};

int main()
{
    EventSource<int> intEvent;

    auto t1 = intEvent += [](int v)
    {
        cout << "t1: " << v << endl;
    };

    auto t2 = intEvent += [&](int v)
    {
        intEvent -= t1;
        cout << "t2: " << v << endl;
    };

    intEvent(2);
    intEvent(3);
}

 这个实现比较简单,但是可以工作。

热心网友 时间:2023-10-29 17:06

#include <functional>
#include <list>
#include <algorithm>
#include <utility>
#include <iostream>
using namespace std;

template<typename EventArg>
class EventSource
{
    using HandlerType = function<void(EventArg const&)>;
    using HandlerList = list<HandlerType>;
public:
    using TokenType = void*;

    EventSource() = default;

    TokenType operator +=(HandlerType handler)
    {
        m_handlers.push_back(move(handler));
        return &m_handlers.back();
    }

    void operator -=(TokenType t)
    {
        m_handlers.remove_if([t](HandlerType const& h) { return &h == t; });
    }

    void operator ()(EventArg const& v)
    {
        for (auto it = m_handlers.begin(); it != m_handlers.end();)
        {
            auto cur = it++;
            (*cur)(v);
        }
    }
private:
    EventSource(EventSource&) = delete;
    EventSource& operator=(EventSource&) = delete;

    HandlerList m_handlers;
};

int main()
{
    EventSource<int> intEvent;

    auto t1 = intEvent += [](int v)
    {
        cout << "t1: " << v << endl;
    };

    auto t2 = intEvent += [&](int v)
    {
        intEvent -= t1;
        cout << "t2: " << v << endl;
    };

    intEvent(2);
    intEvent(3);
}

 这个实现比较简单,但是可以工作。

热心网友 时间:2023-10-29 17:06

#include <functional>
#include <list>
#include <algorithm>
#include <utility>
#include <iostream>
using namespace std;

template<typename EventArg>
class EventSource
{
    using HandlerType = function<void(EventArg const&)>;
    using HandlerList = list<HandlerType>;
public:
    using TokenType = void*;

    EventSource() = default;

    TokenType operator +=(HandlerType handler)
    {
        m_handlers.push_back(move(handler));
        return &m_handlers.back();
    }

    void operator -=(TokenType t)
    {
        m_handlers.remove_if([t](HandlerType const& h) { return &h == t; });
    }

    void operator ()(EventArg const& v)
    {
        for (auto it = m_handlers.begin(); it != m_handlers.end();)
        {
            auto cur = it++;
            (*cur)(v);
        }
    }
private:
    EventSource(EventSource&) = delete;
    EventSource& operator=(EventSource&) = delete;

    HandlerList m_handlers;
};

int main()
{
    EventSource<int> intEvent;

    auto t1 = intEvent += [](int v)
    {
        cout << "t1: " << v << endl;
    };

    auto t2 = intEvent += [&](int v)
    {
        intEvent -= t1;
        cout << "t2: " << v << endl;
    };

    intEvent(2);
    intEvent(3);
}

 这个实现比较简单,但是可以工作。

热心网友 时间:2023-10-29 17:06

#include <functional>
#include <list>
#include <algorithm>
#include <utility>
#include <iostream>
using namespace std;

template<typename EventArg>
class EventSource
{
    using HandlerType = function<void(EventArg const&)>;
    using HandlerList = list<HandlerType>;
public:
    using TokenType = void*;

    EventSource() = default;

    TokenType operator +=(HandlerType handler)
    {
        m_handlers.push_back(move(handler));
        return &m_handlers.back();
    }

    void operator -=(TokenType t)
    {
        m_handlers.remove_if([t](HandlerType const& h) { return &h == t; });
    }

    void operator ()(EventArg const& v)
    {
        for (auto it = m_handlers.begin(); it != m_handlers.end();)
        {
            auto cur = it++;
            (*cur)(v);
        }
    }
private:
    EventSource(EventSource&) = delete;
    EventSource& operator=(EventSource&) = delete;

    HandlerList m_handlers;
};

int main()
{
    EventSource<int> intEvent;

    auto t1 = intEvent += [](int v)
    {
        cout << "t1: " << v << endl;
    };

    auto t2 = intEvent += [&](int v)
    {
        intEvent -= t1;
        cout << "t2: " << v << endl;
    };

    intEvent(2);
    intEvent(3);
}

 这个实现比较简单,但是可以工作。

热心网友 时间:2023-10-29 17:06

#include <functional>
#include <list>
#include <algorithm>
#include <utility>
#include <iostream>
using namespace std;

template<typename EventArg>
class EventSource
{
    using HandlerType = function<void(EventArg const&)>;
    using HandlerList = list<HandlerType>;
public:
    using TokenType = void*;

    EventSource() = default;

    TokenType operator +=(HandlerType handler)
    {
        m_handlers.push_back(move(handler));
        return &m_handlers.back();
    }

    void operator -=(TokenType t)
    {
        m_handlers.remove_if([t](HandlerType const& h) { return &h == t; });
    }

    void operator ()(EventArg const& v)
    {
        for (auto it = m_handlers.begin(); it != m_handlers.end();)
        {
            auto cur = it++;
            (*cur)(v);
        }
    }
private:
    EventSource(EventSource&) = delete;
    EventSource& operator=(EventSource&) = delete;

    HandlerList m_handlers;
};

int main()
{
    EventSource<int> intEvent;

    auto t1 = intEvent += [](int v)
    {
        cout << "t1: " << v << endl;
    };

    auto t2 = intEvent += [&](int v)
    {
        intEvent -= t1;
        cout << "t2: " << v << endl;
    };

    intEvent(2);
    intEvent(3);
}

 这个实现比较简单,但是可以工作。

热心网友 时间:2023-10-29 17:06

#include <functional>
#include <list>
#include <algorithm>
#include <utility>
#include <iostream>
using namespace std;

template<typename EventArg>
class EventSource
{
    using HandlerType = function<void(EventArg const&)>;
    using HandlerList = list<HandlerType>;
public:
    using TokenType = void*;

    EventSource() = default;

    TokenType operator +=(HandlerType handler)
    {
        m_handlers.push_back(move(handler));
        return &m_handlers.back();
    }

    void operator -=(TokenType t)
    {
        m_handlers.remove_if([t](HandlerType const& h) { return &h == t; });
    }

    void operator ()(EventArg const& v)
    {
        for (auto it = m_handlers.begin(); it != m_handlers.end();)
        {
            auto cur = it++;
            (*cur)(v);
        }
    }
private:
    EventSource(EventSource&) = delete;
    EventSource& operator=(EventSource&) = delete;

    HandlerList m_handlers;
};

int main()
{
    EventSource<int> intEvent;

    auto t1 = intEvent += [](int v)
    {
        cout << "t1: " << v << endl;
    };

    auto t2 = intEvent += [&](int v)
    {
        intEvent -= t1;
        cout << "t2: " << v << endl;
    };

    intEvent(2);
    intEvent(3);
}

 这个实现比较简单,但是可以工作。

热心网友 时间:2023-10-29 17:06

#include <functional>
#include <list>
#include <algorithm>
#include <utility>
#include <iostream>
using namespace std;

template<typename EventArg>
class EventSource
{
    using HandlerType = function<void(EventArg const&)>;
    using HandlerList = list<HandlerType>;
public:
    using TokenType = void*;

    EventSource() = default;

    TokenType operator +=(HandlerType handler)
    {
        m_handlers.push_back(move(handler));
        return &m_handlers.back();
    }

    void operator -=(TokenType t)
    {
        m_handlers.remove_if([t](HandlerType const& h) { return &h == t; });
    }

    void operator ()(EventArg const& v)
    {
        for (auto it = m_handlers.begin(); it != m_handlers.end();)
        {
            auto cur = it++;
            (*cur)(v);
        }
    }
private:
    EventSource(EventSource&) = delete;
    EventSource& operator=(EventSource&) = delete;

    HandlerList m_handlers;
};

int main()
{
    EventSource<int> intEvent;

    auto t1 = intEvent += [](int v)
    {
        cout << "t1: " << v << endl;
    };

    auto t2 = intEvent += [&](int v)
    {
        intEvent -= t1;
        cout << "t2: " << v << endl;
    };

    intEvent(2);
    intEvent(3);
}

 这个实现比较简单,但是可以工作。

热心网友 时间:2023-10-29 17:06

#include <functional>
#include <list>
#include <algorithm>
#include <utility>
#include <iostream>
using namespace std;

template<typename EventArg>
class EventSource
{
    using HandlerType = function<void(EventArg const&)>;
    using HandlerList = list<HandlerType>;
public:
    using TokenType = void*;

    EventSource() = default;

    TokenType operator +=(HandlerType handler)
    {
        m_handlers.push_back(move(handler));
        return &m_handlers.back();
    }

    void operator -=(TokenType t)
    {
        m_handlers.remove_if([t](HandlerType const& h) { return &h == t; });
    }

    void operator ()(EventArg const& v)
    {
        for (auto it = m_handlers.begin(); it != m_handlers.end();)
        {
            auto cur = it++;
            (*cur)(v);
        }
    }
private:
    EventSource(EventSource&) = delete;
    EventSource& operator=(EventSource&) = delete;

    HandlerList m_handlers;
};

int main()
{
    EventSource<int> intEvent;

    auto t1 = intEvent += [](int v)
    {
        cout << "t1: " << v << endl;
    };

    auto t2 = intEvent += [&](int v)
    {
        intEvent -= t1;
        cout << "t2: " << v << endl;
    };

    intEvent(2);
    intEvent(3);
}

 这个实现比较简单,但是可以工作。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? it人士一般都用什么邮箱 装系统遇到的问题出现 xms init error: uide not loaded!是啥问题 游戏(倩女幽魂)出现initalzationerror4该怎么弄 开机出现Init HiddenPart Error提示是什么问题 在每次启动计算机时就会出现TRecog Init HSENGINE Error.这是怎么回事 InitLoadDll is error!是什么意思怎么弄 新破天一剑跳出DX Init Error怎么解决? 用windows优化大师修复注册表后重启,弹出警告Init socket error 电脑每次开机都会出现 initialization failure错误 打开绝地求生出现这个Failed to initialize BattlEye Service: Driver Init Error (2). 怎么办啊? 为什么打开电脑有AfsocketInit error 请问thinkpad sl410 开机出现fatal error:init-error-logo:can&#39;t open logfile:&#92;privoxy.log&#39; 对话框咋回 电脑一开机就提示[imintell_init]error 什么问题 要怎么关掉 开机出现init socket error,说要重新安装tcp/ip协议,怎么办 运行游戏出现Directx Init Error是什么意思 ttsplayeriniterror什么意思? vivo 手机一个手机号怎么弄两个 vivo手机怎么修改修改 vivo手机可以用同一个手机号申请两个吗? vivo手机怎样开两个? 谁有程序员联合开发网的账号!???可以帮我下载几个程序吗!???非常感谢 哪位好心人帮忙在程序员联合开发网上下个程序,非常谢谢!分不多但是是我所有的分。 1000公斤是一吨吗 1000公斤是一吨吗? 一吨等于一千千克,一千千克 等多少 市斤? 手机开机就显示桌面已停止运行怎么办 佟丽娅一袭白色抹胸礼服裙,女神范十足,单身后的她是否更时尚了? 佟丽娅穿白色抹胸裙亮相,胸口融合轻纱材质,暗纹看起来有高级感吗? 江疏影晚会美翻全场,抹胸紫色薄纱礼裙轻盈灵动,有魅力吗? 陈妍希童颜真显幼稚,穿华丽的抹胸礼裙不像是结过婚的人,你怎么看? 瘦成“纸片人”的陈乔恩,穿抹胸礼裙不怕掉下来吗? 李若彤穿抹胸礼裙的时候,身上哪一部位很迷人? 蓝色抹胸礼裙造型惊艳,柳岩为啥被网友称为水边的精灵? 董洁穿抹胸礼裙化妆,这个妆容你给打多少分? 关晓彤抹胸裙款式简约又立体,你觉得怎样呢? 一身粉色抹胸裙造型出场的张子枫是不是美翻了? 在DELL官网上订购电脑需要注意什么? dell电脑网上定购的流程 网上购买戴尔电脑的步骤(具体哦)! 为什么商城里买DELL电脑比官方网站上便宜那么多钱?是不是货有问题,为什么会差几百,甚至上千~