c++函数映射(Mapping Functions to a Map in C++)

#include <functional>
#include <iostream>
#include <map>

void non_member(uint32_t x) {
    std::cout << "A Non-Member: " << x << std::endl;
}

class Class_A {
public:
    void remote_member(uint32_t x) {
        std::cout << "A Remote Member: " << x << std::endl;
    }
};

class Class_B {
public:
    void local_member(uint32_t x) {
        std::cout << "A Local Member: " << x << std::endl;
    }
    
    void function_map_test() {
        Class_A a;
        
        std::map<uint32_t, std::function<void(uint32_t)>> map;
        
        map[0] = non_member;
        map[1] = std::bind(&Class_B::local_member, this, std::placeholders::_1);
        map[2] = std::bind(&Class_A::remote_member, a, std::placeholders::_1);
        
        map[0](1);
        map[1](2);
        map[2](3);
    }
};

int main(int argc, const char * argv[]) {
    // insert code here...
    Class_B b;
    b.function_map_test();
    
    return 0;
}

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN0AAAA6CAYAAAA0hVwgAAAgAElEQVR4Ae1dB1hUR9d+t9N77x1FBRVBEbvRRLEbjS2JvcQWjSamaGKaGuOnMTGJURN77w17VywoICogAkrvZWnbz//cWVjBgJpu8u99YO/cKeecee+dfuYMDwBBf+kR0CPwtyHA/9s46RnpEdAjwBDQFzr9h6BH4G9GQF/o/mbA9ez0CAgAfFIXBg/fpghq0QyWRiLkFxY/dcBnYuGE0NBg2JmJkJtfDFN7D7Rt0wJUUYSyamVdsn/ILTQ0Q6s2beDr6Yrq4lzwDO0Q2jYYLvZWKCgogEr9W4elPLw6ZTbGDolAUeJN5Ejlf0i+P5LY2d0HLVo0g6ujLYrz8qHU/Na8/BHu+rT/FALcW9b+C2xoy+kE4q7cuOPkaSF8HFYbp8693UszSElEFZmx5G9tRJ0nf8PSfjqi9VPT6fjVofU0P4eWL1G6VE1EKpo/tgf1nbqCNEQkL0oiPzfr38GLT/uiU5ms03s6/470NXg9p/yN5e2VIe9TTkEJy4usOIXCrEz/MVkak1Hv/+e867o4CuuWdFsvT4QG+zIv+4AQNPF0Q1pMat0oT7j54AEwdg7C0D7BOKPgvhkANVTFRmbo0DEcxmIh8lMSce1eMgsMaNkK1kY8VKqEcLa3Rtr9eNxJevgE7cePfB4PQr62J9y+U194WYUwvnyBAOBpeQa0CoG3iwPUimrERl9BdlE1AluHwMxIDBNTExQV5MPSzhkV2Um4EpsMmVwGQAlb99aI6NsapTlJuBx9X8tUbIx27dvD1tQAVWUFuHzhKrjYAA9NgoJhZyJEYUkV3L3coKosQ/SlKJQoVY8Ffk6Xla0dVNIClBgYwoLl5TkT6qP96xHQ1a5tB75HXHtSlJPPWoFVsyN0YXVLaq273UszWUvHRY45tI6GTFzO0n08IpCMzH1o5/Eb7Jn7UZbm0+cT+xEfpnQgKpXUShnJa0JLsu5SWz+7RnnZBXajrHJt5NLMHCoqLmOtg6LkPrk72tCQsUuopEqh43X/5kkK9mtFx29lkIZrEolIVl3F7sqCBAp1sKEN528TkZrkCi7HRKqqPJr1akcSGVrSil2nGA4sgJR0bO3nZCkWEPgi2nM9mTQqBZWXV2uDSUlj2jsw2XsMnEPR0dG09X8zSfIcraCZhTU5OjpRZHwWUUU6hVnrW7rab+u/fK8zkcJDtz5dwIcKe1b9ghI10L5bPxg9o07hvrbi3Hw07dwTYT5eLLZCqUHEjHkY0rMNHtw6jUUr1qLCyBbvfb4YQU7OUKl54AslOL1hDc7HP4KFUwB6t/GAkYk9goKC0KJFC91/YIvm8HSzB0iDstJ8iOwdYGUhRE5RFTQqBdyDO2HpirkwUWXhw2lvYc32SPi2fgkfT50AiUaA8uwYnLh9H2JeNQ4fvQqhjS/aBJhBrdYA4OPetUhs2BMJgaEdJk6cjAFvzMbMV7sjJeY8Jo2fjNNJJXh53Pt4vXcrQKMC1+DyBCIUZNzBl58txMZtu1Aq42gBDq6+CA4ORkgLX3CD5Wdd0tIi5BQUgcfn+gv66/8LArrupcDEFd1CWgOQw8jbDgo5ENC6HTydTHE3u7xhPHjanuS1y0fh3XU4Xh8ZwuJxH1HbQG/m3vDZHHy+PxEBYT3Rv60HmlrbQs1NfGikWLzgQwTOtUfnFu4wtnNFuxGjcOy7ydBotB8xR4DHI5y/egFKtRIP4h/A2tMMDoJUJBcYwsqBB19vf9ib8oBqMwybMBHGljaMb1Drpqgw5yHzbjRuFbihk70KR89EoU/vtoAhowxAjXWfTsR3yV7o2qsX7H2bIrS7G0tv6eSLKdMmw97ZghXOAA6b/dEg4gqIAsvmDsOqIyksLh/auivm8h4sWlyMjLgzeN5pJNZFZlT0P/9fENAVOje/AAT52bF8jxw9Wpt/Q190aOKBu9nxjeLBfYLpd6KRJmqOt/q10cXj87k2ECA25uKDr+Ji8qAGT1uzq8uRzdegDU/7wQqEIpRm30f0tetQ0eNCx+cRUtNy0bSNGLJHcZjyyZdQoRSvf/Qdwp0NweNJ2PhOUV2O1PuJqFSoEcXjIz8xBV1HN4cYAhgJubEfD2LuzoTS3tgv1+pylQD3x+dBXRNHWpqPxMQE3L1zB3yhEFExD4AaWQENZBWVOiIaaOXNenQPBw9VQJqfjucd4WmUKrBGlwgK5fMWVR1rveNfiICuexnQsTdsJcCFAz+gZcuWmL/mCMAzRJdeXZ6ZLb5Sis2bt0NdE5M0hLu3HrGnkbMXYN5789GpjSvUpam4V5ILAY/7+HnQTsNoExmIhbh1+Dt07tIFXbt2Zf9dunRB5y5d8cXKbTA04EEokOPYmSM4deYy18eDQMRDWnIiCssBsZCHqyf3YsOm7cgv1yBPWo6CKh4ET
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值