gpt4 book ai didi

c++检查函数在运行时是否重载

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:38 24 4
gpt4 key购买 nike

我有一个抽象接口(interface) I,其中定义了 virtual void Foo() 以及其他函数。有一些子类在其中重新定义了 Foo,而在其他子类中没有 Foo。现在,给定 I* pi,是否有可能知道 Foo 是否被重新定义?也就是说,我想知道 pi->Foo() 是否会调用 I::Foo()X::Foo()其中 X 是某种类型,其中 Foo 被重新定义。我认为这可以通过比较 &I::Foo&pi->Foo 之间的函数指针来完成,但不确定具体如何操作。请注意,我不知道 pi 在运行时的具体类型,因此我无法通过 &I::Foo != &X::Foo 直接比较函数指针。

添加:所以,很多人指出设计不好,违背了抽象和虚函数的概念。我这样做的主要原因是绕过空函数调用以提高速度。由于一些 Foo() 是空的,当 Foo() 为空时,我想从 pi 的 vector 中删除它。

最佳答案

您无法从 &pi->Foo 中找到答案,因为 GCC 错误消息会告诉您,

ISO C++ forbids taking the address of a bound member function to form a pointer to member function.

如果您想在运行时知道对象的类型,请使用typeid。否则,请重新考虑您的设计。

关于c++检查函数在运行时是否重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8731302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com