C中的转换函数指针

假设我有两个类,A和B:

class A
{
public:
    typedef void (*Handler)( A * a );

    Handler handler;

    void foo() ( handler( this ); }
};

class B : public A
{
};

假设我有一个功能

void bar( B * b );

我可以去吗

B b;
b.handler = bar;???

如果我声明空格(A * a)然后一切都很酷,但是我必须投一个丑陋的B *.我无法模板化typedef,所以有一种很好的方法吗?

解决方法:

这是cdhowie提到的解决方案.您可以定义一个抽象基类:

template<typename T>
class AbstractA {
   typedef void (*Handler)( T * a );
   Handler handler;

   void foo() ( handler( (T*) this ); }
};

然后实现这样的子类:

class A : public AbstractA<A> {
    //...
};

class B : public AbstractA<B> {
    //...
};
上一篇:c – 在派生类中使用基类的模板参数


下一篇:c – 如何从基类转换为派生类?