加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

当C使用智能指针时,C#委托等效

发布时间:2020-12-16 07:02:41 所属栏目:百科 来源:网络整理
导读:我主要是一个从事C项目的.NET程序员,我正在尝试确定处理使用Action和Function模板类型的委托的等效方法.我在.NET代码中使用委托作为事件和回调.我的C项目使用智能指针和与C#程序相同的委托设计模式.处理这种情况的最佳方法是什么?我不清楚如何传递和维护一
我主要是一个从事C项目的.NET程序员,我正在尝试确定处理使用Action和Function模板类型的委托的等效方法.我在.NET代码中使用委托作为事件和回调.我的C项目使用智能指针和与C#程序相同的委托设计模式.处理这种情况的最佳方法是什么?我不清楚如何传递和维护一个函数指针,该函数指针也跟踪智能指针并可能删除底层对象,因为事件容器使用弱引用.该库需要是多平台的,因此不幸的是,使用CLR是一种选择.

解决方法

你在寻找的是一个绑定到现有对象的方法指针,就是这样吗?

您应该查看boost::bind.如果您的环境支持它,您还可以使用std :: tr1 :: bind或甚至std :: bind(如果它支持C 11).

说明你想要的例子是:

struct X
{
    bool f(int a);
};
X x;
shared_ptr<X> p(new X);
int i = 5;

bind(&X::f,ref(x),_1)(i);     // x.f(i)
bind(&X::f,&x,_1)(i);         //(&x)->f(i)
bind(&X::f,x,_1)(i);          // (internal copy of x).f(i)
bind(&X::f,p,_1)(i);          // (internal copy of p)->f(i)

The last two examples are interesting in that they produce “self-contained” function objects. bind(&X::f,_1) stores a copy of x. bind(&X::f,_1) stores a copy of p,and since p is a boost::shared_ptr,the function object retains a reference to its instance of X and will remain valid even when p goes out of scope or is reset().

对于boost :: bind,std :: tr1 :: bind和std :: bind之间的区别,我让你看到this other question on SO.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读