• c#中的委托和c++中的bind/function对比


    在c++中,如果要实现这样一个功能,比如定时器,在指定的时间执行指定的函数,接口可以采用如下的设计

    uint64_t addtimer(uint64_t t, std::function<void(uint64_t)>);

    在实现上可以采用如下的方式

    std::map<uint64_t, std::function<void(uint64_t)> > _timetimer;

    这样即可将需要在将来执行的函数保存在一个map中,然后在时间到达之后调用。
    用户使用这样的一组接口的方式可以是

    void testtime(uint64_t tick)
    {
        //do anything
    }
    
    addtimer(time, testtime);

    而在c#中实现相同的功能则采用的是委托

    public delegate void tickHandle(Int64 tick);
    
    public void addticktime(Int64 process, tickHandle handle)
    {
            tickHandledict.Add(process, handle);
    }
    
    private Dictionary<Int64, tickHandle> tickHandledict;

    用户调用时,采用如下代码即可

    class test
    {
        public void ontime(Int64 tick)
        {
            //do anything
        }
    }
    
    test _test = new test();
    addticktime(time, _test.ontime);

    abelkhan技术论坛:http://abelkhan.com/forum.php

  • 相关阅读:
    win32
    win32
    win32
    win32
    C++ 指针的错误释放
    交换两个数不引入第三个变量
    交换两个数不引入第三个变量
    hdu3986 spfa + 枚举最短路上的边
    hdu3986 spfa + 枚举最短路上的边
    hdu2433 spfa+mark[x][u][v]优化
  • 原文地址:https://www.cnblogs.com/qianqians/p/5635291.html
Copyright © 2020-2023  润新知