如何解决C ++使用成员函数指针调用抽象类方法
我有一个抽象类:
class Proto{
public:
virtual void fu() = 0;
};
然后我有一个实现fu
的类:
class Impl: public Proto{
public:
void fu();
};
void Impl::fu(){
printf("im fu");
}
还有另一个类需要使用fu
实现而不知道实现本身:
class Invoke{
public:
void useFu(void (Proto::*)());
};
然后我打电话给useFu
:
inv.useFu(static_cast<void (Proto::*)()>(&Impl::fu));
所以我的问题是,我如何在fu()
中呼叫useFu(void (Proto::*)())
?
void Invoke::useFu(void (Proto::*fu)()){
fu() <--- how to use it?
};
我无法直接调用抽象类方法,所以我创建了某种预实现:
class PreImpl: public Proto{
public:
virtual void fu();
};
void PreImpl::fu()
{
printf("I'm the wrong fu");
}
然后在useFu
中,我打电话给fu()
:
void Invoke::useFu(void (Proto::*fu)()){
PreImpl preImpl;
(static_cast<PreImpl>(preImpl).*fu)();
};
但是在调用useFu
之后,我执行了一个错误的函数:
void main(){
Invoke inv;
inv.useFu(static_cast<void (Proto::*)()>(&Impl::fu));
}
打印出:
I'm the wrong fu
解决方法
实际上是XY问题。
根据Igor Tandetnik的建议,我最终只是将一个类作为函数参数传递。
void Invoke::useFu(Proto* impl){
impl->fu();
};
inv.useFu(&Impl);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。