假设我有两个类,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;???
如果我声明 void bar( A * a )
那么一切都很好,但是我必须将 a
转换为 B*
这是丑陋的。我无法对 typedef 进行模板化,那么有什么好的方法可以做到这一点吗?
最佳答案
不,没有。
您违反了 LSP:不能使用任何随机 A* 调用 b.handler(),而基类 promise 可以。
B b;
b.handler = bar; // This doesn't compile!
A a2;
b.handler(&a2); // As this would call bar(B*) with an A*
在这种情况下可以有不同的类型,但前提是参数是逆变的并且返回值是协变的。
关于c++ - 在 C++ 中转换函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15572611/