C++博客-sanxcoo-最新评论http://www.cppblog.com/sanxcoo/CommentsRSS.aspx做一个耐得住寂寞的人zh-cnThu, 01 Apr 2010 06:24:30 GMTThu, 01 Apr 2010 06:24:30 GMTcnblogsre: 将成员函数作为回调函数http://www.cppblog.com/sanxcoo/archive/2010/04/02/111271.html#111470SanxcooSanxcooFri, 02 Apr 2010 14:56:00 GMThttp://www.cppblog.com/sanxcoo/archive/2010/04/02/111271.html#111470

Sanxcoo 2010-04-02 22:56 发表评论
]]>
re: 将成员函数作为回调函数http://www.cppblog.com/sanxcoo/archive/2010/04/02/111271.html#111439OwnWaterlooOwnWaterlooFri, 02 Apr 2010 07:56:00 GMThttp://www.cppblog.com/sanxcoo/archive/2010/04/02/111271.html#111439std::function?
那是什么东西?


OwnWaterloo 2010-04-02 15:56 发表评论
]]>
re: 将成员函数作为回调函数http://www.cppblog.com/sanxcoo/archive/2010/04/02/111271.html#111392陈梓瀚(vczh)陈梓瀚(vczh)Fri, 02 Apr 2010 03:24:00 GMThttp://www.cppblog.com/sanxcoo/archive/2010/04/02/111271.html#111392

陈梓瀚(vczh) 2010-04-02 11:24 发表评论
]]>
re: 将成员函数作为回调函数http://www.cppblog.com/sanxcoo/archive/2010/04/01/111271.html#111310OwnWaterlooOwnWaterlooThu, 01 Apr 2010 10:31:00 GMThttp://www.cppblog.com/sanxcoo/archive/2010/04/01/111271.html#111310gcc下有继承关系。
msvc下有多继承关系。

指向成员的指针就可能不仅仅是一个地址。


OwnWaterloo 2010-04-01 18:31 发表评论
]]>
re: 将成员函数作为回调函数http://www.cppblog.com/sanxcoo/archive/2010/04/01/111271.html#111308SanxcooSanxcooThu, 01 Apr 2010 10:26:00 GMThttp://www.cppblog.com/sanxcoo/archive/2010/04/01/111271.html#111308谢谢。
成员指针如果不是地址的话,还有其他哪些情况?希望能举个例子

Sanxcoo 2010-04-01 18:26 发表评论
]]>
re: 将成员函数作为回调函数http://www.cppblog.com/sanxcoo/archive/2010/04/01/111271.html#111305OwnWaterlooOwnWaterlooThu, 01 Apr 2010 09:41:00 GMThttp://www.cppblog.com/sanxcoo/archive/2010/04/01/111271.html#111305所以最安全的作法是实现一个转发函数, 而不是去取地址:

void forwarding(void* o, int i, double d)
{
static_cast<C*>(o)->F(i, d);

}

然后将forwarding绑定到一个object上:
C o;
void (*f)(int, double ) = bind(forwarding, &o);

然后将f传递给需要回调的地方:
f(1212, 3.26);

等效于:
o.f(1212, 326);


OwnWaterloo 2010-04-01 17:41 发表评论
]]>
re: 将成员函数作为回调函数http://www.cppblog.com/sanxcoo/archive/2010/04/01/111271.html#111303OwnWaterlooOwnWaterlooThu, 01 Apr 2010 09:36:00 GMThttp://www.cppblog.com/sanxcoo/archive/2010/04/01/111271.html#111303
template<typename D,typename S>
D cast_union(S src)
{
union
{
S src;
D dst;
} u = {src};
return u.dst;
}

uintptr_t address = cast_union<uintptr_t>(&C::F);


OwnWaterloo 2010-04-01 17:36 发表评论
]]>