假设我有两个类,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> {
//...
};