答复: [cpp] 派生类成员函数指针->基类成员函数指针->派生类成员函数指针,这个转换过程是否安全?
千里马肝
oiramario at gmail.com
Wed Apr 19 21:09:02 CST 2006
终于看到我非常同意的论点了
-----原始邮件-----
发件人: cpp-bounces at codingnow.com [mailto:cpp-bounces at codingnow.com]代表 analyst
发送时间: 2006年4月19日 11:06
收件人: C++ Discuss Group
主题: Re: [cpp] 派生类成员函数指针->基类成员函数指针->派生类成员函数指针,这个转换过程是否安全?
这段代码显然是思维混乱,在一个迷宫里走的太远,忘记了自己从哪里来,要往何处去。
在06-4-18,jiyong wu <jiyong.wu at gmail.com> 写道:
最近想到一个技巧,涉及基类和派生类成员指针的互相强制类型转换过程,不敢确认是否存在问题,所以想借助大家的法眼了。
派生类成员函数指针->基类成员函数指针->派生类成员函数指针,这个转换过程是否安全?
例子虽然简化了,还稍有复杂:
class Base
{
typedef void (Base::*MemFunSav)();
MemFunSav mfsav;
void (Base::*invoker)();
public:
virtual ~Base() {}
virtual void run() = 0;
template <typename T>
void do_something( void (T::*on_done_callback)() )
{
invoker = &Base::invoke<T>;
mfsav = static_cast<MemFunSav>(on_done_callback);
// ...
// do/wait something done
}
public: // simple
void on_time_to_callback()
{
(this->*invoker)();
}
private:
template <typename T>
void invoke()
{
typedef void (T::*Cb_MemF)();
T* inst = static_cast<T*>(this);
Cb_MemF mf = static_cast<Cb_MemF>(mfsav);
(inst->*mf)();
}
};
struct Derived : public Base
{
virtual void run()
{
// ....
do_something( &Derived::wake_up );
}
void wake_up()
{
// hello world
}
};
Base* foo__;
void foo()
{
foo__->on_time_to_callback();
}
int main()
{
Derived* inst = new Derived;
foo__ = inst;
inst->run();
// ...........
// later, somewhere
foo();
}
~
_______________________________________________
Cpp mailing list
Cpp at codingnow.com
http://codingnow.com/mailman/listinfo/cpp
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://codingnow.com/pipermail/cpp/attachments/20060419/156f1bf3/attachment.html
More information about the Cpp
mailing list